I screwed up the parameters to glTexImage2D. It should be
Code: Select all
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, surface->w, surface->h , 0, GL_RGB, GL_UNSIGNED_BYTE, surface->pixels);
[/quote]Hi, I'm trying to compile a simple psp application that will render a textured image to the screen using PSPGL and SDL but it always seems to die at the SDL_GL_SwapBuffers call.
Here is my code:I also put it through the debugger and got this out of it:Code: Select all
#include <SDL/SDL.h> #include <SDL/SDL_opengl.h> #include <pspkernel.h> #include <pspdebug.h> #include <pspsdk.h> #include <pspthreadman.h> #include <stdlib.h> #include <stdio.h> #define PSP_SCREEN_HEIGHT 272 #define PSP_SCREEN_WIDTH 480 #define SCREEN_BPP 32 PSP_MODULE_INFO("test", 0, 1, 0); PSP_HEAP_SIZE_KB(20480); PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER|PSP_THREAD_ATTR_VFPU); #define printf pspDebugScreenPrintf FILE* output; int exit_callback (int arg1, int arg2, void *common) { sceKernelExitGame(); return 0; } int update_thread (SceSize args, void *argp) { int cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); return 0; } void setup_callbacks (void) { int id; if ((id = sceKernelCreateThread("update_thread", update_thread, 0x11, 0xFA0, 0, 0)) >= 0) sceKernelStartThread(id, 0, 0); } void back_to_kernel (void) { sceKernelExitGame(); } int game(); void Display(); GLuint tex; extern "C" int main(int argc, char* argv[]) { int returnNumber = game(); fclose(output); sceKernelSleepThread(); return returnNumber; } int game() { setup_callbacks(); pspDebugScreenInit(); SDL_Surface * screen; output = fopen("test.txt", "w"); printf("Starting init\n"); if (SDL_Init(SDL_INIT_VIDEO) != 0) { printf("Unable to initialize SDL: %s\n", SDL_GetError()); return 1; } printf("Setting Video\n"); screen = SDL_SetVideoMode(PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT, 32, SDL_OPENGL); if ( screen == NULL ) { printf("Unable to set video mode: %s\n", SDL_GetError()); return 1; } printf("Starting gl initialization\n"); glEnable(GL_TEXTURE_2D); glViewport(0, 0, PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT); glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0f, PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT, 0.0f, -1.0f, 1.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); printf("Loading image\n"); SDL_Surface* surface = SDL_LoadBMP("image.bmp"); printf("drawing image\n"); glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT , 0, GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR); SDL_FreeSurface(surface); while(1) { // Clear the screen before drawing glClear( GL_COLOR_BUFFER_BIT ); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); Display(); printf("Calling swapbuffers\n"); SDL_GL_SwapBuffers(); } glDeleteTextures( 1, &tex ); fclose(output); return 0; } void Display() { float tX = 240; float tY = 136; glBindTexture(GL_TEXTURE_2D, tex); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex2d(-tX, -tY); glTexCoord2f(1,0); glVertex2d(tX, -tY); glTexCoord2f(1,1); glVertex2d(tX, tY); glTexCoord2f(0,1); glVertex2d(-tX, tY); glEnd(); }
Any help would be appreciated.Code: Select all
Program received signal SIGHUP, Hangup. 0x0884991c in sceGeListEnQueue () (gdb) backtrace #0 0x0884991c in sceGeListEnQueue () #1 0xffffffff8809a3f8 in ?? () warning: GDB can't find the start of the function at 0x8809a3f8. GDB is unable to find the start of the function at 0x8809a3f8 and thus can't determine the size of that function's stack frame. This means that GDB may be unable to access that stack frame, or the frames below it. This problem is most likely caused by an invalid program counter or stack pointer. However, if you think GDB should simply search farther back from 0x8809a3f8 for code which looks like the beginning of a function, you can increase the range of the search using the `set heuristic-fence-post' command. Previous frame inner to this frame (corrupt stack?)
Also another note, I have successfully got an image rendered using SDL or PSPGL but it seems that the combination of the two has problems.
I also forgot to mention that this is being compiled and run on a slim PSP.