370 lines
4.9 KiB
C
370 lines
4.9 KiB
C
/*
|
|
* 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;
|
|
|
|
}
|
|
|