Tôi đang làm việc trên một dự án với SDL và OpenGL. Trò chơi hoạt động rất tốt trên Windows, Linux, OS X và iOS. Tuy nhiên, phiên bản Android đang hiển thị một vấn đề trên điện thoại của tôi nói riêng. Tôi đã thử nghiệm một thiết bị khác và nó cũng hoạt động rất tốt.
Vấn đề tôi gặp phải là một trục trặc hình ảnh. Nó xảy ra theo cụm: ví dụ: 90 khung hình ổn và sau đó 40 khung hình trục trặc. Bản thân trục trặc là loại khó diễn tả nhưng tôi sẽ thử. Màn hình đang được cập nhật một phần chính xác (từ đỉnh điện thoại của tôi xuống khoảng một nửa) và nhấp nháy một phần. Hiệu ứng nhấp nháy là một số loại nhảy qua lại. Tôi nghĩ rằng nó có liên quan đến bộ đệm đôi. Tôi nghĩ rằng bởi vì những gì tôi có thể nhìn thấy trên màn hình đang nhảy qua nhảy lại từng khung hình. Nó giống như một nửa màn hình là một khung hình trong thời gian và khung hình tiếp theo trễ 2 khung hình. Khá giống như một đám rước của Echternach, tôi đoán bạn có thể nói. Nếu tôi vẽ nó trong một biểu đồ nơi thời gian trôi qua khi di chuyển xuống biểu đồ, tôi nghĩ rằng tôi
left half | right half (phone is in landscape)
------------------------
time 1 | 1 1
time 2 | 2 2
time 3 | 3 1
time 4 | 4 4
time 5 | 5 3
time 6 | 6 6
time 7 | 7 5
time 8 | 8 8
time 9 | 9 7
Vì vậy, nửa bên phải là một khung thời gian và khung tiếp theo, nó hiển thị khung trước đó. Điều này hỗ trợ lý thuyết của tôi rằng có một vấn đề với bộ đệm đôi. Có vẻ như bằng cách nào đó, chúng ta không thể cập nhật hoàn toàn backbuffer trước khi nó được đưa lên màn hình, hoặc một cái gì đó.
Ngoài ra, sự phân chia giữa tốt và trục trặc trên màn hình khác nhau từ khung hình này sang khung hình khác, điều mà tôi nghĩ chứng minh đó là vấn đề đồng bộ hóa và phụ thuộc nhiều vào thời gian của những gì đang diễn ra. Thêm glFinish();
trước khi SDL_GL_SwapWindow();
cuộc gọi không giúp đỡ.
Thông tin phiên bản: SDL báo cáo vsync sẽ được bật. Tuy nhiên, tôi tin rằng điều này không rách. Điện thoại của tôi là Samsung Galaxy S3 mini và đang chạy Android 5.1.1 (CM12) và GPU (Mali-400) hỗ trợ OpenGL ES 2.0. Các trò chơi khác chạy ổn trên điện thoại của tôi.