Initial commit

This commit is contained in:
2025-11-17 10:28:09 +01:00
parent 7bff81691f
commit 6ee36e26be
391 changed files with 110253 additions and 0 deletions

View File

@@ -0,0 +1,338 @@
#include "./mesh.h"
#include "./shader.h"
#include "./sampler2D.h"
#include "./texture2D.h"
#include "./floatArray.h"
#include "./unsignedIntegerArray.h"
#include "./eventManager.h"
#include "./pipeline.h"
#include "./renderPasses/renderPassQuads.h"
#include "./renderPasses/renderPassFont.h"
#include "./renderPasses/renderPassCompute.h"
#include "./renderPasses/renderPassCompute2.h"
#include "./renderPasses/renderPassTesselation.h"
#include "./resourceManager.h"
#include "./windowManager.h"
#include "./event.h"
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/keysym.h>
#define GL_GLEXT_PROTOTYPES
#include <GL/glext.h>
#include <GL/gl.h> // GL 1.1 functions
#include <GL/glx.h>
#include <time.h>
#include <zlib.h>
event * globalEvent;
resourceManager * resources;
class opengl{
Display * mainDisplay;
Window mainWindow;
int MainScreen;
Window RootWindow;
int lastTime = clock();
struct timespec startTime;
int frameCount = 0;
sampler2D * testSampler;
struct windowManager * windowManager = new windowManager();
struct eventManger * eventManger = new eventManger();
struct pipeline * pipeline = new pipeline();
initialize() {
printf("initialize opengl.\n");
resources = new resourceManager();
this->setupWindow();
this->setupManagers();
this->showVersion();
//this->createTexture();
this->setupPipeline();
//this->loadFont();
this->setupTime();
this->setupRenderLoop();
}
showExtensions() {
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);
}
showVersion() {
printf("opengl version : %s\n\n", glGetString(GL_VERSION) );
}
setupTime() {
clock_gettime( CLOCK_REALTIME, &this->startTime );
}
setupManagers() {
this->eventManger->mainDisplay = this->mainDisplay;
this->eventManger->mainWindow = this->mainWindow;
this->eventManger->RootWindow = this->RootWindow;
}
setupWindow() {
this->windowManager->setupDisplay();
this->windowManager->setupWindow();
this->mainDisplay = this->windowManager->mainDisplay;
this->mainWindow = this->windowManager->mainWindow;
this->RootWindow = this->windowManager->RootWindow;
}
setupRenderLoop() {
int IsProgramRunning = 1;
while( IsProgramRunning ) {
while( XPending( this->mainDisplay ) ) {
XEvent GeneralEvent = {};
XNextEvent( this->mainDisplay, &GeneralEvent );
switch( GeneralEvent.type ) {
case ClientMessage:
IsProgramRunning = 0;
break;
}
}
this->render();
}
}
setupPipeline() {
quads * quadsPass = new quads();
font * fontPass = new font();
compute * computePass = new compute();
compute2 * computePass2 = new compute2();
tesselation * tesselationPass = new tesselation();
//this->pipeline->addRenderPass( fontPass );
this->pipeline->addRenderPass( quadsPass );
//this->pipeline->addRenderPass( computePass );
//this->pipeline->addRenderPass( computePass2 );
//this->pipeline->addRenderPass( tesselationPass );
}
double clockToMilliseconds( clock_t ticks ){
return ( ticks / ( double ) CLOCKS_PER_SEC );
}
render() {
//this->clearColor( 0.0, 0.0, 0.0, 0.0 );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
this->clear( GL_DEPTH_BUFFER_BIT );
globalEvent = this->eventManger->fetchEvent();
this->pipeline->render();
this->swapBuffers();
//this->displayFPS();
}
displayFPS() {
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;
}
}
clear( GLbitfield mask ) {
glClear( mask );
}
clearColor( float r, float g, float b, float a ) {
glClearColor( r, g, b, a );
}
swapBuffers() {
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 );
}
}