SDL2 avec OpenGL - résultats étranges, qu'est-ce qui ne va pas?

8

Je porte une application sur iOS et je dois donc la mettre à niveau vers SDL2 à partir de SDL1.2 (jusqu'à présent, je la teste uniquement en tant qu'application de bureau OS X). Cependant, lors de l'exécution du code avec SDL2, j'obtiens des résultats étranges comme indiqué sur la deuxième image ci-dessous (la première image est à quoi elle ressemble avec SDL, correctement). Le seul ensemble de modifications qui provoque cela est celui-ci , voyez-vous quelque chose de mal, ou SDL2 a-t-il des nuances OpenGL que je ne connais pas? Mon SDL est basé sur les dernières nouveautés de HG .

Mise à jour: une autre question sur le port iOS du même projet est ici .

Mise à jour 2: elle est désormais également disponible sur le newsgroup SDL: http://thread.gmane.org/gmane.comp.lib.sdl/58026

Mise à jour 3: J'ai essayé d'utiliser Regal pour OpenGL portable, le résultat pas si bon est sur la troisième capture d'écran, produite simplement en remplaçant

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

avec

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

en utilisant SDL 1.2 en utilisant SDL 2 utilisation de Regal avec SDL 2

Gabor
la source
1
Est-il possible que (pour une raison quelconque) les sprites / particules soient simplement tournés de ~ 90 °, ou étirés en rectangles très fins? Une vue filaire devrait vous permettre de vérifier cela rapidement.
2
Selon l'ensemble de modifications que vous avez lié, vous effectuez un rendu à l'aide de glCallLists (), qui n'est pas pris en charge sous OpenGL ES (ce que vous utiliserez sous iOS). (Je suis un peu surpris que cela ne vous donne pas d'erreurs de compilation sur iOS, pour être honnête.)
Trevor Powell
les captures d'écran provenaient d'OS X, le portage iOS est venu après cela (une glCallLists n'a été utilisée que pour le rendu de texte qui était spécifique à Linux, donc je ne l'utilisais même pas sur OS X)
Gabor

Réponses:

7

Voici votre problème, remarquez que je commente la surface = SDL_Get ... cela donnait des résultats étranges. Vous avez également oublié de créer le contexte OpenGL. Faites-moi savoir si vous avez d'autres problèmes.

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
la source