2012-09-20 29 views
13

Chúng tôi đang cố gắng tìm ra lý do tại sao chúng tôi có FPS tương đối chậm trên iphone 4 và ipad 1. Chúng tôi đang xem Danh mục cảnh báo này trong Phân tích GL mở của chúng tôi: Tải đệm logic. Tóm tắt là "tải khung hình chậm". Đề xuất cho biết bộ đệm khung phải được GPU tải trước khi hiển thị. Nó khuyến cáo rằng chúng tôi không thực hiện thao tác rõ ràng toàn màn hình ở đầu mỗi khung hình. Tuy nhiên, chúng tôi đang làm điều này với glClear.tải đệm logic - tải framebuffer chậm - ios

[EAGLContext setCurrentContext:_context]; 

glBindFramebuffer(GL_FRAMEBUFFER, _defaultFramebuffer); 
glClear(GL_COLOR_BUFFER_BIT); 

// Our OpenGL Drawing Occurs here 

... ... ...

// hint to opengl to not bother with this buffer 
const GLenum discards[] = {GL_DEPTH_ATTACHMENT}; 
glBindFramebuffer(GL_FRAMEBUFFER, _defaultFramebuffer); 
glDiscardFramebufferEXT(GL_FRAMEBUFFER, 1, discards); 

// present render 
[_context presentRenderbuffer:GL_RENDERBUFFER]; 

Chúng tôi không thực sự sử dụng độ sâu hoặc stencil buffer.

Điều này xảy ra khi chúng tôi hiển thị kết cấu dưới dạng ô và nó sẽ xảy ra mỗi khi chúng tôi tải một ô mới. Nó trỏ đến lệnh glDrawArrays của chúng ta.

Bất kỳ đề xuất nào về cách chúng tôi có thể loại bỏ cảnh báo này?

Nếu nó giúp ở tất cả, đây là cách chúng tôi đang thiết lập các lớp:

eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys: 
           [NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking, 
           kEAGLColorFormatRGB565, kEAGLDrawablePropertyColorFormat, 
           nil]; 
+2

tôi nên lưu ý rằng trong khi các điểm phân tích này như một điểm tối ưu hóa, trong kinh nghiệm của tôi nó được một khá nhỏ. Tỷ lệ cược là, nó có ít để làm với lý do tại sao ứng dụng của bạn được dựng hình chậm. Nhìn vào công cụ trình điều khiển OpenGL ES và xem liệu bạn có đang tối đa hóa trình kết xuất (phân đoạn giới hạn) hoặc trình biên dịch (giới hạn hình học) hay không. –

+0

Chúng tôi đã chạy thiết bị openGL ES và có vẻ như chúng tôi đang tối đa hóa tỷ lệ lấp đầy (phân đoạn). Chúng tôi chỉ hiển thị các ô 256x256 đang lấp đầy khu vực hiển thị. Có bất kỳ phần mở rộng cụ thể của táo mà chúng ta có thể cần phải xem xét, cho dù đó là tạo ra các kết cấu hay cách chúng ta đang thiết lập các kết cấu, hoặc bất kỳ mục đích nào khác? – user1687195

+1

Để cập nhật điều này, chúng tôi đặt glHint (GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES, GL_FASTEST); Và điều đó dường như đã giúp khá nhiều với FPS. – user1687195

Trả lời

0

Sau rất nhiều công việc và thảo luận, tôi quản lý để con số này ra cuối cùng.

Ok Tôi đang sử dụng thư viện nguồn mở có tên GLESuperman. Đó là một thư viện tuyệt vời giúp gỡ lỗi các loại vấn đề này và nó có thể được sử dụng để vẽ đồ họa - nó khá nhanh. Có, tôi không có ý tưởng tại sao nó được gọi là ... Nhưng nó miễn phí và nó hoạt động. Chỉ cần tìm kiếm nó trên Github. Nó được cập nhật rất thường xuyên và hỗ trợ iOS 7 trở lên.

Ok như vậy để thực hiện nó, làm như sau:

// Import the framework into your Xcode project. 
#import <GLESuperman/GLESuperman.h> 

// Also you will need to import Core Graphics. 
#import <CoreGraphics/CoreGraphics.h> 

// In order to run it in debug mode and get 
// a live detailed report about things like FPS, do the following. 
GLESuperman *debugData = [[GLESuperman alloc] init]; 
[debugData runGraphicDebug withRepeat:YES inBackground:YES]; 

// In order to draw graphics, do the following. 
GLESuperman *graphicView = [[GLESuperman alloc] init]; 
[graphicView drawView:CGRectMake(0, 0, 50, 50]; 

// You can do other things too like add images/etc.. 
// Just look at the library documentation, it has everything. 

[graphicView setAlpha:1.0]; 
[graphicView showGraphic];