SDL2 con OpenGL - risultati strani, cosa c'è che non va?


8

Sto effettuando il porting di un'app su iOS e quindi devo aggiornarla su SDL2 da SDL1.2 (finora sto testandola solo come app desktop su OS X). Tuttavia, quando eseguo il codice con SDL2, sto ottenendo strani risultati come mostrato nella seconda immagine sotto (la prima immagine è come appare con SDL, correttamente). Il singolo changeset che causa questo è questo , vedi qualcosa di ovviamente sbagliato lì, o SDL2 ha alcune sfumature OpenGL di cui non sono a conoscenza? Il mio SDL si basa sulle ultime novità di HG .

Aggiornamento: un'altra domanda sulla porta iOS dello stesso progetto è qui .

Aggiornamento 2: ora è anche sul newsgroup SDL: http://thread.gmane.org/gmane.comp.lib.sdl/58026

Aggiornamento 3: ho provato a utilizzare Regal per OpenGL portatile, il risultato non così buono è sul terzo screenshot, prodotto semplicemente sostituendo

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

con

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

usando SDL 1.2 usando SDL 2 utilizzando Regal con SDL 2


1
È possibile che (per qualsiasi motivo) gli sprite / particelle siano semplicemente ruotati di ~ 90 ° o allungati a rettangoli molto sottili? Una vista wireframe dovrebbe consentirti di verificarlo rapidamente.

2
Secondo il changeset che hai collegato, stai eseguendo il rendering utilizzando glCallLists (), che non è supportato in OpenGL ES (che è quello che utilizzerai in iOS). (Sono un po 'sorpreso che non ti dia errori di compilazione su iOS, a dire il vero.)
Trevor Powell,

gli screenshot provenivano da OS X, il porting di iOS è arrivato dopo (un glCallLists è stato usato solo per il rendering di testo specifico per Linux, quindi non lo stavo usando nemmeno su OS X)
Gabor,

Risposte:


7

Ecco il tuo problema nota che commento la superficie = SDL_Get ... stava dando alcuni strani risultati. Inoltre hai dimenticato di creare il contesto OpenGL. Fammi sapere se hai altri problemi.

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();
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.