Initial commit
This commit is contained in:
369
application/demos/example.opengl/engine/opengl.c
Normal file
369
application/demos/example.opengl/engine/opengl.c
Normal file
@@ -0,0 +1,369 @@
|
||||
/*
|
||||
* This file is automaticaly generated, Please dont edit this file!
|
||||
*/
|
||||
#include <engine/opengl.h>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
event * globalEvent;
|
||||
|
||||
resourceManager * resources;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void opengl_initialize( opengl * this ) {
|
||||
|
||||
printf("initialize opengl.\n");
|
||||
|
||||
resources = resourceManager_newPointer();
|
||||
|
||||
opengl_setupWindow( this );
|
||||
|
||||
opengl_setupManagers( this );
|
||||
|
||||
opengl_showVersion( this );
|
||||
|
||||
|
||||
|
||||
opengl_setupPipeline( this );
|
||||
|
||||
|
||||
|
||||
opengl_setupTime( this );
|
||||
|
||||
opengl_setupRenderLoop( this );
|
||||
|
||||
}
|
||||
|
||||
void opengl_showExtensions( opengl * this ) {
|
||||
|
||||
GLint max_layers;
|
||||
|
||||
glGetIntegerv ( GL_MAX_ARRAY_TEXTURE_LAYERS, &max_layers );
|
||||
|
||||
printf("GL_MAX_ARRAY_TEXTURE_LAYERS: %i\n", max_layers);
|
||||
|
||||
|
||||
GLint max_texture_size;
|
||||
|
||||
glGetIntegerv (GL_MAX_TEXTURE_SIZE, &max_texture_size);
|
||||
|
||||
printf("GL_MAX_TEXTURE_SIZE: %i\n", max_texture_size);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void opengl_showVersion( opengl * this ) {
|
||||
|
||||
printf("opengl version : %s\n\n", glGetString(GL_VERSION) );
|
||||
|
||||
}
|
||||
|
||||
void opengl_setupTime( opengl * this ) {
|
||||
|
||||
clock_gettime( CLOCK_REALTIME, &this->startTime );
|
||||
|
||||
}
|
||||
|
||||
void opengl_setupManagers( opengl * this ) {
|
||||
|
||||
this->eventManger->mainDisplay = this->mainDisplay;
|
||||
|
||||
this->eventManger->mainWindow = this->mainWindow;
|
||||
|
||||
this->eventManger->RootWindow = this->RootWindow;
|
||||
|
||||
}
|
||||
|
||||
void opengl_setupWindow( opengl * this ) {
|
||||
|
||||
windowManager_setupDisplay( this->windowManager );
|
||||
|
||||
windowManager_setupWindow( this->windowManager );
|
||||
|
||||
|
||||
this->mainDisplay = this->windowManager->mainDisplay;
|
||||
|
||||
this->mainWindow = this->windowManager->mainWindow;
|
||||
|
||||
this->RootWindow = this->windowManager->RootWindow;
|
||||
|
||||
}
|
||||
|
||||
void opengl_setupRenderLoop( opengl * this ) {
|
||||
|
||||
int IsProgramRunning = 1;
|
||||
|
||||
while( IsProgramRunning ) {
|
||||
|
||||
while( XPending( this->mainDisplay ) ) {
|
||||
|
||||
XEvent GeneralEvent = {};
|
||||
|
||||
XNextEvent( this->mainDisplay, &GeneralEvent );
|
||||
|
||||
switch( GeneralEvent.type ) {
|
||||
|
||||
case ClientMessage:
|
||||
|
||||
|
||||
IsProgramRunning = 0;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
opengl_render( this );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void opengl_setupPipeline( opengl * this ) {
|
||||
|
||||
quads * quadsPass = quads_newPointer();
|
||||
|
||||
font * fontPass = font_newPointer();
|
||||
|
||||
compute * computePass = compute_newPointer();
|
||||
|
||||
compute2 * computePass2 = compute2_newPointer();
|
||||
|
||||
tesselation * tesselationPass = tesselation_newPointer();
|
||||
|
||||
|
||||
|
||||
|
||||
pipeline_addRenderPass( this->pipeline, 1, (int[1]){ 44 }, quadsPass );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
double opengl_clockToMilliseconds( opengl * this, clock_t ticks ) {
|
||||
|
||||
return ( ticks / ( double ) CLOCKS_PER_SEC );
|
||||
|
||||
}
|
||||
|
||||
void opengl_render( opengl * this ) {
|
||||
|
||||
|
||||
|
||||
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||
|
||||
opengl_clear( this, GL_DEPTH_BUFFER_BIT );
|
||||
|
||||
globalEvent = eventManger_fetchEvent( this->eventManger );
|
||||
|
||||
pipeline_render( this->pipeline );
|
||||
|
||||
opengl_swapBuffers( this );
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void opengl_displayFPS( opengl * this ) {
|
||||
|
||||
struct timespec now;
|
||||
|
||||
clock_gettime( CLOCK_REALTIME, &now );
|
||||
|
||||
this->frameCount++;
|
||||
|
||||
int elapsedTime = now.tv_sec - this->startTime.tv_sec;
|
||||
|
||||
if( elapsedTime != this->lastTime ) {
|
||||
|
||||
printf("%i fps.\n\n", this->frameCount );
|
||||
|
||||
this->lastTime = elapsedTime;
|
||||
|
||||
this->frameCount = 0;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void opengl_clear( opengl * this, GLbitfield mask ) {
|
||||
|
||||
glClear( mask );
|
||||
|
||||
}
|
||||
|
||||
void opengl_clearColor( opengl * this, float r, float g, float b, float a ) {
|
||||
|
||||
glClearColor( r, g, b, a );
|
||||
|
||||
}
|
||||
|
||||
void opengl_swapBuffers( opengl * this ) {
|
||||
|
||||
PFNGLXSWAPINTERVALEXTPROC glXSwapIntervalEXT;
|
||||
|
||||
PFNGLXSWAPINTERVALMESAPROC glXSwapIntervalMESA;
|
||||
|
||||
PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI;
|
||||
|
||||
|
||||
glXSwapIntervalEXT = ( PFNGLXSWAPINTERVALEXTPROC ) glXGetProcAddress( ( const GLubyte * ) "glXSwapIntervalEXT" );
|
||||
|
||||
if ( glXSwapIntervalEXT != NULL ) {
|
||||
|
||||
glXSwapIntervalEXT( this->mainDisplay, this->mainWindow, 0 );
|
||||
|
||||
} else {
|
||||
|
||||
glXSwapIntervalMESA = ( PFNGLXSWAPINTERVALMESAPROC ) glXGetProcAddress( ( const GLubyte * ) "glXSwapIntervalMESA" );
|
||||
|
||||
if ( glXSwapIntervalMESA != NULL ) {
|
||||
|
||||
glXSwapIntervalMESA( 0 );
|
||||
|
||||
} else {
|
||||
|
||||
glXSwapIntervalSGI = ( PFNGLXSWAPINTERVALSGIPROC ) glXGetProcAddress( ( const GLubyte * ) "glXSwapIntervalSGI" );
|
||||
|
||||
if ( glXSwapIntervalSGI != NULL ) {
|
||||
|
||||
glXSwapIntervalSGI( 0 );
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
glXSwapBuffers( this->mainDisplay, this->mainWindow );
|
||||
|
||||
}
|
||||
|
||||
opengl opengl_new() {
|
||||
|
||||
opengl instance;
|
||||
|
||||
instance.lastTime = clock();
|
||||
|
||||
instance.frameCount = 0;
|
||||
|
||||
instance.windowManager = windowManager_newPointer();
|
||||
|
||||
instance.eventManger = eventManger_newPointer();
|
||||
|
||||
instance.pipeline = pipeline_newPointer();
|
||||
|
||||
return instance;
|
||||
|
||||
}
|
||||
|
||||
opengl * opengl_newPointer() {
|
||||
|
||||
struct opengl * pointer = malloc( sizeof ( struct opengl ) );
|
||||
|
||||
pointer->lastTime = clock();
|
||||
|
||||
pointer->frameCount = 0;
|
||||
|
||||
pointer->windowManager = windowManager_newPointer();
|
||||
|
||||
pointer->eventManger = eventManger_newPointer();
|
||||
|
||||
pointer->pipeline = pipeline_newPointer();
|
||||
|
||||
return pointer;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user