SDL2 mit OpenGL - seltsame Ergebnisse, was ist los?

8

Ich portiere eine App auf iOS und muss sie daher von SDL1.2 auf SDL2 aktualisieren (bisher teste ich sie nur als OS X-Desktop-App). Wenn ich den Code jedoch mit SDL2 ausführe, erhalte ich seltsame Ergebnisse, wie im zweiten Bild unten gezeigt (das erste Bild sieht korrekt mit SDL aus). Das einzige Änderungsset, das dies verursacht, ist dieses. Sehen Sie dort offensichtlich etwas Falsches oder hat SDL2 einige OpenGL-Nuancen, die mir nicht bekannt sind? Mein SDL basiert auf dem neuesten von HG .

Update: Eine weitere Frage zum iOS-Port desselben Projekts ist hier .

Update 2: Dies ist jetzt auch in der SDL-Newsgroup: http://thread.gmane.org/gmane.comp.lib.sdl/58026

Update 3: Ich habe versucht, Regal für tragbares OpenGL zu verwenden. Das nicht so gute Ergebnis ist der dritte Screenshot, der lediglich durch Ersetzen erstellt wurde

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

mit

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

mit SDL 1.2 mit SDL 2 Verwenden von Regal mit SDL 2

Gabor
quelle
1
Ist es möglich, dass (aus welchem ​​Grund auch immer) die Sprites / Partikel einfach um ~ 90 ° gedreht oder zu sehr dünnen Rechtecken gedehnt werden? In einer Drahtgitteransicht sollten Sie dies schnell überprüfen können.
2
Entsprechend dem von Ihnen verknüpften Änderungssatz rendern Sie mit glCallLists (), das unter OpenGL ES nicht unterstützt wird (was Sie unter iOS verwenden). (Ich bin ein bisschen überrascht, dass es Ihnen keine Kompilierungsfehler unter iOS gibt, um ehrlich zu sein.)
Trevor Powell
Die Screenshots kamen von OS X, die iOS-Portierung kam danach (eine glCallLists wurde nur für das Rendern von Text verwendet, das Linux-spezifisch war, so dass ich es nicht einmal unter OS X verwendete)
Gabor

Antworten:

7

Hier ist Ihr Problem Hinweis Ich kommentiere die Oberfläche = SDL_Get ... es gab einige seltsame Ergebnisse. Außerdem haben Sie vergessen, den OpenGL-Kontext zu erstellen. Lassen Sie mich wissen, wenn Sie weitere Probleme haben.

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();
}
Steven
quelle