SDL2 với OpenGL - kết quả kỳ lạ, có gì sai?


8

Tôi đang chuyển một ứng dụng sang iOS và do đó cần nâng cấp nó lên SDL2 từ SDL1.2 (cho đến nay tôi chỉ thử nghiệm nó dưới dạng một ứng dụng trên máy tính để bàn OS X). Tuy nhiên, khi chạy mã với SDL2, tôi nhận được kết quả kỳ lạ như được hiển thị trên hình ảnh thứ hai bên dưới (hình ảnh đầu tiên là nó trông như thế nào với SDL, chính xác). Bộ thay đổi duy nhất gây ra cái này là cái này , bạn có thấy có gì đó không rõ ràng ở đó không, hoặc SDL2 có một số sắc thái OpenGL mà tôi không biết? SDL của tôi dựa trên bản mới nhất từ HG .

Cập nhật: một câu hỏi khác về cổng iOS của cùng một dự án có ở đây .

Cập nhật 2: đây cũng là trên nhóm tin SDL: http://thread.gmane.org/gmane.comp.lib.sdl/58026

Cập nhật 3: Tôi đã thử sử dụng Regal cho OpenGL di động, kết quả không tốt là trên ảnh chụp màn hình thứ ba, được tạo ra chỉ bằng cách thay thế

#include <OpenGL/gl.h>
#include <OpenGL/glu.h>

với

#include "GL/Regal.h"
#include "GL/RegalGLU.h"

sử dụng SDL 1.2 sử dụng SDL 2 sử dụng Regal với SDL 2


1
Có thể là (vì bất kỳ lý do gì) các sprite / hạt chỉ được xoay ~ 90 °, hoặc kéo dài thành hình chữ nhật rất mỏng? Một khung nhìn khung dây sẽ cho phép bạn kiểm tra nhanh chóng.

2
Theo các thay đổi bạn đã liên kết, bạn đang kết xuất bằng glCallLists (), không được hỗ trợ trong OpenGL ES (đây là những gì bạn sẽ sử dụng trong iOS). (Tôi hơi ngạc nhiên khi nó không cung cấp cho bạn các lỗi biên dịch trên iOS, thành thật mà nói.)
Trevor Powell

các ảnh chụp màn hình đến từ OS X, porting iOS xuất hiện sau đó (một glCallLists chỉ được sử dụng để hiển thị văn bản cụ thể cho linux nên tôi đã không sử dụng nó ngay cả trên OS X)
Gabor

Câu trả lời:


7

Đây là thông báo vấn đề của bạn Tôi nhận xét bề mặt = SDL_Get ... nó đã cho một số kết quả kỳ lạ. Ngoài ra, bạn quên tạo bối cảnh OpenGL. Hãy cho tôi biết nếu bạn có bất kỳ vấn đề khác.

SDLWindow::SDLWindow(int width, int height, double axisLen, const std::string &caption)
:m_fov(axisLen)
,m_width(0)
,m_height(0)
,m_fps(0)
,m_idxSnapshot(0)
,m_camPos(0, 0, 2)
,m_camLookAt(0, 0, 0)
,m_camOrient(0, 1, 0)
,surface(NULL)
,m_texStar(0)
,m_bRunning(true)
{
SDL_GLContext ctx;

if (SDL_Init(SDL_INIT_VIDEO) < 0)
    throw std::runtime_error(SDL_GetError());
atexit(SDL_Quit);

SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 0 );
SDL_GL_SetAttribute( SDL_GL_RETAINED_BACKING, 1 ); 

 if ((window = SDL_CreateWindow(caption.c_str(), SDL_WINDOWPOS_CENTERED,
 SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | 
 SDL_WINDOW_BORDERLESS)) == NULL)
    throw std::runtime_error(SDL_GetError());     

/*if ((surface = SDL_GetWindowSurface(window)) == NULL)
    throw std::runtime_error(SDL_GetError());*/

m_width = width;
m_height = height;

ctx = SDL_GL_CreateContext(window);

InitGL();
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.