![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/share/emscripten/tests/ |
Upload File : |
/******************************************************************* * * * 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. */ #ifndef __EMSCRIPTEN__ #define USE_GLEW 0 #endif #if USE_GLEW #include "GL/glew.h" #endif #include <SDL/SDL.h> #if !USE_GLEW #include "SDL/SDL_opengl.h" #endif #include <stdio.h> #include <string.h> #include <assert.h> 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 ); #ifndef __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_MODELVIEW ); glLoadIdentity(); // Clear the screen before drawing glClear( GL_COLOR_BUFFER_BIT ); typedef struct Color { GLubyte r; GLubyte g; GLubyte b; GLubyte a; } Color; typedef struct Vertex { GLfloat x; GLfloat y; Color color; } Vertex; Vertex vertices[18] = { {-1.00, 0.0, {0xFF, 0x00, 0xFF, 0xFF}}, {-1.00, 1.0, {0xFF, 0xFF, 0x00, 0xFF}}, {-0.75, 0.0, {0xFF, 0x00, 0x00, 0xFF}}, {-0.75, 1.0, {0xFF, 0xFF, 0xFF, 0xFF}}, {-0.50, 0.0, {0xFF, 0x00, 0x00, 0xFF}}, {-0.50, 1.0, {0xFF, 0xFF, 0x00, 0xFF}}, {-0.25, 0.0, {0xFF, 0x00, 0xFF, 0xFF}}, {-0.25, 1.0, {0xFF, 0xFF, 0x00, 0xFF}}, {-0.00, 0.0, {0xFF, 0x00, 0x00, 0xFF}}, {-0.00, 1.0, {0xFF, 0xFF, 0xFF, 0xFF}}, { 0.25, 0.0, {0xFF, 0x00, 0x00, 0xFF}}, { 0.25, 1.0, {0xFF, 0xFF, 0x00, 0xFF}}, { 0.50, 0.0, {0xFF, 0x00, 0xFF, 0xFF}}, { 0.50, 1.0, {0xFF, 0xFF, 0x00, 0xFF}}, { 0.75, 0.0, {0xFF, 0x00, 0x00, 0xFF}}, { 0.75, 1.0, {0xFF, 0xFF, 0xFF, 0xFF}}, { 1.00, 0.0, {0xFF, 0x00, 0x00, 0xFF}}, { 1.00, 1.0, {0xFF, 0xFF, 0x00, 0xFF}} }; Vertex vertices2[18] = { {-1.00, -1.0, {0xFF, 0x00, 0xFF, 0xFF}}, {-1.00, 0.0, {0xFF, 0xFF, 0x00, 0xFF}}, {-0.75, -1.0, {0xFF, 0x00, 0x00, 0xFF}}, {-0.75, 0.0, {0xFF, 0xFF, 0xFF, 0xFF}}, {-0.50, -1.0, {0xFF, 0x00, 0x00, 0xFF}}, {-0.50, 0.0, {0xFF, 0xFF, 0x00, 0xFF}}, {-0.25, -1.0, {0xFF, 0x00, 0xFF, 0xFF}}, {-0.25, 0.0, {0xFF, 0xFF, 0x00, 0xFF}}, {-0.00, -1.0, {0xFF, 0x00, 0x00, 0xFF}}, {-0.00, 0.0, {0xFF, 0xFF, 0xFF, 0xFF}}, { 0.25, -1.0, {0xFF, 0x00, 0x00, 0xFF}}, { 0.25, 0.0, {0xFF, 0xFF, 0x00, 0xFF}}, { 0.50, -1.0, {0xFF, 0x00, 0xFF, 0xFF}}, { 0.50, 0.0, {0xFF, 0xFF, 0x00, 0xFF}}, { 0.75, -1.0, {0xFF, 0x00, 0x00, 0xFF}}, { 0.75, 0.0, {0xFF, 0xFF, 0xFF, 0xFF}}, { 1.00, -1.0, {0xFF, 0x00, 0x00, 0xFF}}, { 1.00, 0.0, {0xFF, 0xFF, 0x00, 0xFF}} }; // make a vertex buffer for the second set of vertices GLuint vbo = 0; glGenBuffers(1, &vbo); // bind to it glBindBuffer(GL_ARRAY_BUFFER, vbo); // send it to gl glBufferData(GL_ARRAY_BUFFER, sizeof(vertices2), vertices2, GL_STATIC_DRAW); // unbind from it glBindBuffer(GL_ARRAY_BUFFER, 0); // DRAW // Clear the screen before drawing glClear( GL_COLOR_BUFFER_BIT ); // This test ensures that we can use two separate arrays in memory for different // attributes, and that they each can have different stride. glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glVertexPointer(2, GL_FLOAT, sizeof(Vertex), vertices); glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Vertex), &vertices[0].color); glDrawArrays(GL_TRIANGLE_STRIP, 10, 3); glDrawArrays(GL_TRIANGLE_STRIP, 0, 6); glBindBuffer(GL_ARRAY_BUFFER, 0); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); SDL_GL_SwapBuffers(); #ifndef __EMSCRIPTEN__ // Wait for 3 seconds to give us a chance to see the image SDL_Delay(3000); #endif SDL_Quit(); return 0; }