Shader first pass
This commit is contained in:
@@ -44,11 +44,11 @@ errorret_t screenInit() {
|
||||
#endif
|
||||
|
||||
// Init screen to backbuffer mode by default
|
||||
screenBind();
|
||||
errorChain(screenBind());
|
||||
errorOk();
|
||||
}
|
||||
|
||||
void screenBind() {
|
||||
errorret_t screenBind() {
|
||||
// Assume backbuffer is currently bound.
|
||||
switch(SCREEN.mode) {
|
||||
case SCREEN_MODE_BACKBUFFER: {
|
||||
@@ -59,7 +59,7 @@ void screenBind() {
|
||||
// No needd for a framebuffer.
|
||||
#ifdef DUSK_DISPLAY_SIZE_DYNAMIC
|
||||
if(SCREEN.framebufferReady) {
|
||||
frameBufferDispose(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferDispose(&SCREEN.framebuffer));
|
||||
SCREEN.framebufferReady = false;
|
||||
}
|
||||
#endif
|
||||
@@ -79,19 +79,21 @@ void screenBind() {
|
||||
curFbHeight = frameBufferGetHeight(&SCREEN.framebuffer);
|
||||
if(curFbWidth == SCREEN.width && curFbHeight == SCREEN.height) {
|
||||
// Correct size, nothing to do.
|
||||
frameBufferBind(&SCREEN.framebuffer);
|
||||
return;
|
||||
errorChain(frameBufferBind(&SCREEN.framebuffer));
|
||||
errorOk();
|
||||
}
|
||||
|
||||
// Need a new framebuffer.
|
||||
frameBufferDispose(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferDispose(&SCREEN.framebuffer));
|
||||
SCREEN.framebufferReady = false;
|
||||
}
|
||||
|
||||
// Create new framebuffer
|
||||
frameBufferInit(&SCREEN.framebuffer, SCREEN.width, SCREEN.height);
|
||||
errorChain(frameBufferInit(
|
||||
&SCREEN.framebuffer, SCREEN.width, SCREEN.height
|
||||
));
|
||||
SCREEN.framebufferReady = true;
|
||||
frameBufferBind(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferBind(&SCREEN.framebuffer));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -109,10 +111,10 @@ void screenBind() {
|
||||
SCREEN.aspect = (float_t)SCREEN.width / (float_t)SCREEN.height;
|
||||
|
||||
if(SCREEN.framebufferReady) {
|
||||
frameBufferDispose(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferDispose(&SCREEN.framebuffer));
|
||||
SCREEN.framebufferReady = false;
|
||||
}
|
||||
return;
|
||||
errorOk();
|
||||
}
|
||||
|
||||
int32_t newFbWidth, newFbHeight;
|
||||
@@ -136,24 +138,26 @@ void screenBind() {
|
||||
SCREEN.width = newFbWidth;
|
||||
SCREEN.height = newFbHeight;
|
||||
SCREEN.aspect = (float_t)SCREEN.width / (float_t)SCREEN.height;
|
||||
frameBufferBind(&SCREEN.framebuffer);
|
||||
return;
|
||||
errorChain(frameBufferBind(&SCREEN.framebuffer));
|
||||
errorOk();
|
||||
}
|
||||
|
||||
// Need a new framebuffer.
|
||||
frameBufferDispose(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferDispose(&SCREEN.framebuffer));
|
||||
SCREEN.framebufferReady = false;
|
||||
}
|
||||
|
||||
// Create new framebuffer
|
||||
frameBufferInit(&SCREEN.framebuffer, newFbWidth, newFbHeight);
|
||||
errorChain(frameBufferInit(
|
||||
&SCREEN.framebuffer, newFbWidth, newFbHeight
|
||||
));
|
||||
SCREEN.width = newFbWidth;
|
||||
SCREEN.height = newFbHeight;
|
||||
SCREEN.aspect = (float_t)SCREEN.width / (float_t)SCREEN.height;
|
||||
SCREEN.framebufferReady = true;
|
||||
|
||||
// Bind FB
|
||||
frameBufferBind(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferBind(&SCREEN.framebuffer));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -173,10 +177,10 @@ void screenBind() {
|
||||
if(fbWidth == newFbWidth && fbHeight == newFbHeight) {
|
||||
// No need to use framebuffer.
|
||||
if(SCREEN.framebufferReady) {
|
||||
frameBufferDispose(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferDispose(&SCREEN.framebuffer));
|
||||
SCREEN.framebufferReady = false;
|
||||
}
|
||||
return;
|
||||
errorOk();
|
||||
}
|
||||
|
||||
if(SCREEN.framebufferReady) {
|
||||
@@ -185,19 +189,21 @@ void screenBind() {
|
||||
curFbWidth = frameBufferGetWidth(&SCREEN.framebuffer);
|
||||
curFbHeight = frameBufferGetHeight(&SCREEN.framebuffer);
|
||||
if(curFbWidth == newFbWidth && curFbHeight == newFbHeight) {
|
||||
frameBufferBind(&SCREEN.framebuffer);
|
||||
return;
|
||||
errorChain(frameBufferBind(&SCREEN.framebuffer));
|
||||
errorOk();
|
||||
}
|
||||
|
||||
// Need a new framebuffer.
|
||||
frameBufferDispose(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferDispose(&SCREEN.framebuffer));
|
||||
SCREEN.framebufferReady = false;
|
||||
}
|
||||
|
||||
// Create a new framebuffer.
|
||||
frameBufferInit(&SCREEN.framebuffer, newFbWidth, newFbHeight);
|
||||
errorChain(frameBufferInit(
|
||||
&SCREEN.framebuffer, newFbWidth, newFbHeight
|
||||
));
|
||||
SCREEN.framebufferReady = true;
|
||||
frameBufferBind(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferBind(&SCREEN.framebuffer));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -217,10 +223,10 @@ void screenBind() {
|
||||
if(fbWidth == newFbWidth && fbHeight == newFbHeight) {
|
||||
// No need to use framebuffer.
|
||||
if(SCREEN.framebufferReady) {
|
||||
frameBufferDispose(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferDispose(&SCREEN.framebuffer));
|
||||
SCREEN.framebufferReady = false;
|
||||
}
|
||||
return;
|
||||
errorOk();
|
||||
}
|
||||
|
||||
if(SCREEN.framebufferReady) {
|
||||
@@ -229,19 +235,21 @@ void screenBind() {
|
||||
curFbWidth = frameBufferGetWidth(&SCREEN.framebuffer);
|
||||
curFbHeight = frameBufferGetHeight(&SCREEN.framebuffer);
|
||||
if(curFbWidth == newFbWidth && curFbHeight == newFbHeight) {
|
||||
frameBufferBind(&SCREEN.framebuffer);
|
||||
return;
|
||||
errorChain(frameBufferBind(&SCREEN.framebuffer));
|
||||
errorOk();
|
||||
}
|
||||
|
||||
// Need a new framebuffer.
|
||||
frameBufferDispose(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferDispose(&SCREEN.framebuffer));
|
||||
SCREEN.framebufferReady = false;
|
||||
}
|
||||
|
||||
// Create a new framebuffer.
|
||||
frameBufferInit(&SCREEN.framebuffer, newFbWidth, newFbHeight);
|
||||
errorChain(frameBufferInit(
|
||||
&SCREEN.framebuffer, newFbWidth, newFbHeight
|
||||
));
|
||||
SCREEN.framebufferReady = true;
|
||||
frameBufferBind(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferBind(&SCREEN.framebuffer));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -262,9 +270,11 @@ void screenBind() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
errorOk();
|
||||
}
|
||||
|
||||
void screenUnbind() {
|
||||
errorret_t screenUnbind() {
|
||||
switch(SCREEN.mode) {
|
||||
// Nothing to do here.
|
||||
case SCREEN_MODE_BACKBUFFER:
|
||||
@@ -275,7 +285,9 @@ void screenUnbind() {
|
||||
case SCREEN_MODE_FIXED_HEIGHT:
|
||||
case SCREEN_MODE_FIXED_SIZE:
|
||||
case SCREEN_MODE_FIXED_WIDTH:
|
||||
if(SCREEN.framebufferReady) frameBufferBind(NULL);
|
||||
if(SCREEN.framebufferReady) {
|
||||
errorChain(frameBufferBind(NULL));
|
||||
}
|
||||
break;
|
||||
|
||||
case SCREEN_MODE_FIXED_VIEWPORT_HEIGHT:
|
||||
@@ -286,17 +298,19 @@ void screenUnbind() {
|
||||
assertUnreachable("Invalid screen mode.");
|
||||
break;
|
||||
}
|
||||
|
||||
errorOk();
|
||||
}
|
||||
|
||||
void screenRender() {
|
||||
errorret_t screenRender() {
|
||||
if(SCREEN.mode == SCREEN_MODE_BACKBUFFER) {
|
||||
return;
|
||||
errorOk();
|
||||
}
|
||||
|
||||
#ifdef DUSK_DISPLAY_SIZE_DYNAMIC
|
||||
if(SCREEN.mode == SCREEN_MODE_FIXED_VIEWPORT_HEIGHT) {
|
||||
glViewport(0, 0, SCREEN.width, SCREEN.height);
|
||||
return;
|
||||
errorOk();
|
||||
}
|
||||
|
||||
if(
|
||||
@@ -307,7 +321,7 @@ void screenRender() {
|
||||
) {
|
||||
if(!SCREEN.framebufferReady) {
|
||||
// Nothing to do here.
|
||||
return;
|
||||
errorOk();
|
||||
}
|
||||
|
||||
float_t bbWidth, bbHeight;
|
||||
@@ -357,22 +371,25 @@ void screenRender() {
|
||||
COLOR_BLACK
|
||||
);
|
||||
cameraPushMatrix(&SCREEN.framebufferCamera);
|
||||
textureBind(&SCREEN.framebuffer.texture);
|
||||
meshDraw(&SCREEN.frameBufferMesh, 0, -1);
|
||||
errorChain(textureBind(&SCREEN.framebuffer.texture));
|
||||
errorChain(meshDraw(&SCREEN.frameBufferMesh, 0, -1));
|
||||
cameraPopMatrix();
|
||||
|
||||
return;
|
||||
errorOk();
|
||||
};
|
||||
#endif
|
||||
|
||||
assertUnreachable("Invalid screen mode.");
|
||||
errorThrow("Invalid screen mode.");
|
||||
}
|
||||
|
||||
void screenDispose() {
|
||||
errorret_t screenDispose() {
|
||||
#ifdef DUSK_DISPLAY_SIZE_DYNAMIC
|
||||
if(SCREEN.framebufferReady) {
|
||||
frameBufferDispose(&SCREEN.framebuffer);
|
||||
errorChain(frameBufferDispose(&SCREEN.framebuffer));
|
||||
SCREEN.framebufferReady = false;
|
||||
}
|
||||
#endif
|
||||
|
||||
errorOk();
|
||||
}
|
||||
Reference in New Issue
Block a user