diff options
Diffstat (limited to 'tests/gl_ps_workaround.c')
-rw-r--r-- | tests/gl_ps_workaround.c | 230 |
1 files changed, 0 insertions, 230 deletions
diff --git a/tests/gl_ps_workaround.c b/tests/gl_ps_workaround.c deleted file mode 100644 index 1e2a5c41..00000000 --- a/tests/gl_ps_workaround.c +++ /dev/null @@ -1,230 +0,0 @@ -/******************************************************************* - * * - * Using SDL With OpenGL * - * * - * Tutorial by Kyle Foley (sdw) * - * * - * http://gpwiki.org/index.php/SDL:Tutorials:Using_SDL_with_OpenGL * - * * - *******************************************************************/ - -/* -THIS WORK, INCLUDING THE SOURCE CODE, DOCUMENTATION -AND RELATED MEDIA AND DATA, IS PLACED INTO THE PUBLIC DOMAIN. - -THE ORIGINAL AUTHOR IS KYLE FOLEY. - -THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY -OF ANY KIND, NOT EVEN THE IMPLIED WARRANTY OF -MERCHANTABILITY. THE AUTHOR OF THIS SOFTWARE, -ASSUMES _NO_ RESPONSIBILITY FOR ANY CONSEQUENCE -RESULTING FROM THE USE, MODIFICATION, OR -REDISTRIBUTION OF THIS SOFTWARE. -*/ - -#if !EMSCRIPTEN -#define USE_GLEW 1 -#endif - -#if USE_GLEW -#include "GL/glew.h" -#endif - -#include "SDL/SDL.h" -#include "SDL/SDL_image.h" -#if !USE_GLEW -#include "SDL/SDL_opengl.h" -#endif - -#include <stdio.h> -#include <string.h> -#include <assert.h> - -void shaders() { -#if USE_GLEW - glewInit(); -#endif - - GLint ok; - - const char *vertexShader = "void main(void) \n" - "{ \n" - " gl_Position = ftransform(); \n" - " gl_TexCoord[0] = gl_MultiTexCoord0; \n" - " gl_FrontColor = gl_Color; \n" - "} \n"; - const char *fragmentShader = "uniform sampler2D tex0; \n" - "void main(void) \n" - "{ \n" - " gl_FragColor = gl_Color * texture2D(tex0, gl_TexCoord[0].xy); \n" - "} \n"; - - GLuint vs = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vs, 1, &vertexShader, NULL); - glCompileShader(vs); - glGetShaderiv(vs, GL_COMPILE_STATUS, &ok); - assert(ok); - - GLuint fs = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fs, 1, &fragmentShader, NULL); - glCompileShader(fs); - glGetShaderiv(fs, GL_COMPILE_STATUS, &ok); - assert(ok); - - GLuint program = glCreateProgram(); - - glAttachShader(program, vs); - glAttachShader(program, fs); - glLinkProgram(program); - glGetProgramiv(program, GL_LINK_STATUS, &ok); - assert(ok); - - glUseProgram(program); -} - -int main(int argc, char *argv[]) -{ - SDL_Surface *screen; - - // Slightly different SDL initialization - if ( SDL_Init(SDL_INIT_VIDEO) != 0 ) { - printf("Unable to initialize SDL: %s\n", SDL_GetError()); - return 1; - } - - SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); // *new* - - screen = SDL_SetVideoMode( 640, 480, 16, SDL_OPENGL ); // *changed* - if ( !screen ) { - printf("Unable to set video mode: %s\n", SDL_GetError()); - return 1; - } - - // Set the OpenGL state after creating the context with SDL_SetVideoMode - - glClearColor( 0, 0, 0, 0 ); - -#if !EMSCRIPTEN - glEnable( GL_TEXTURE_2D ); // Need this to display a texture XXX unnecessary in OpenGL ES 2.0/WebGL -#endif - - glViewport( 0, 0, 640, 480 ); - - glMatrixMode( GL_PROJECTION ); - GLfloat matrixData[] = { 2.0/640, 0, 0, 0, - 0, -2.0/480, 0, 0, - 0, 0, -1, 0, - -1, 1, 0, 1 }; - glLoadMatrixf(matrixData); // test loadmatrix - - glMatrixMode( GL_MODELVIEW ); - glLoadIdentity(); - - // Load the OpenGL texture - - GLuint texture; // Texture object handle - SDL_Surface *surface; // Gives us the information to make the texture - - if ( (surface = IMG_Load("screenshot.png")) ) { - - // Check that the image's width is a power of 2 - if ( (surface->w & (surface->w - 1)) != 0 ) { - printf("warning: image.bmp's width is not a power of 2\n"); - } - - // Also check if the height is a power of 2 - if ( (surface->h & (surface->h - 1)) != 0 ) { - printf("warning: image.bmp's height is not a power of 2\n"); - } - - // Have OpenGL generate a texture object handle for us - glGenTextures( 1, &texture ); - - // Bind the texture object - glBindTexture( GL_TEXTURE_2D, texture ); - - // Set the texture's stretching properties - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); - - //SDL_LockSurface(surface); - - // Add some greyness - memset(surface->pixels, 0x66, surface->w*surface->h); - - // Edit the texture object's image data using the information SDL_Surface gives us - glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, surface->w, surface->h, 0, - GL_RGBA, GL_UNSIGNED_BYTE, surface->pixels ); - - //SDL_UnlockSurface(surface); - } - else { - printf("SDL could not load image.bmp: %s\n", SDL_GetError()); - SDL_Quit(); - return 1; - } - - // Free the SDL_Surface only if it was successfully created - if ( surface ) { - SDL_FreeSurface( surface ); - } - - // Clear the screen before drawing - glClear( GL_COLOR_BUFFER_BIT ); - - shaders(); - - // Bind the texture to which subsequent calls refer to - glBindTexture( GL_TEXTURE_2D, texture ); - - // Use clientside vertex pointers to render two items. In this test we have each - // attribute in a separate buffer, packed (i.e. stride == 0) - GLfloat vertexData[] = { 10, 10, - 300, 10, - 300, 128, - 10, 128, - 410, 10, - 600, 10, - 630, 200, - 310, 250, - 100, 300, - 300, 300, - 300, 400, - 100, 400 }; - GLfloat textureData[] = { 0, 0, - 1, 0, - 1, 1, - 0, 1, - 0, 0.5, - 1, 0.5, - 1, 1, - 0.5, 1, - 0, 0, - 1, 0, - 1, 1, - 0, 1, }; - - glEnableClientState(GL_TEXTURE_2D); // XXX should be GL_TEXTURE_COORD_ARRAY); // XXX - glTexCoordPointer(2, GL_FLOAT, 0, textureData); - glEnableClientState(GL_VERTEX_ARRAY); - glVertexPointer(2, GL_FLOAT, 0, vertexData); - - glDrawArrays(GL_QUADS, 0, 12); - - glDisableClientState(GL_TEXTURE_COORD_ARRAY); - glDisableClientState(GL_VERTEX_ARRAY); - - SDL_GL_SwapBuffers(); - -#if !EMSCRIPTEN - // Wait for 3 seconds to give us a chance to see the image - SDL_Delay(3000); -#endif - - // Now we can delete the OpenGL texture and close down SDL - glDeleteTextures( 1, &texture ); - - SDL_Quit(); - - return 0; -} |