Fixed bugs with render passes.
This commit is contained in:
@ -20,7 +20,7 @@ set(SETTING_GAME_POKER 1)
|
|||||||
set(SETTING_GAME_DAWN 2)
|
set(SETTING_GAME_DAWN 2)
|
||||||
set(SETTING_GAME_SANDBOX 3)
|
set(SETTING_GAME_SANDBOX 3)
|
||||||
|
|
||||||
set(SETTING_GAME SETTING_GAME_POKER)
|
set(SETTING_GAME SETTING_GAME_DAWN)
|
||||||
set(SETTING_GAME_NAME "DawnGame")
|
set(SETTING_GAME_NAME "DawnGame")
|
||||||
|
|
||||||
################################## Targets #####################################
|
################################## Targets #####################################
|
||||||
|
@ -7,30 +7,28 @@
|
|||||||
|
|
||||||
#include "renderlist.h"
|
#include "renderlist.h"
|
||||||
|
|
||||||
void renderListInit(renderlist_t *list, int32_t passes, int32_t width, int32_t height) {
|
void renderListInit(renderlist_t *list,int32_t width, int32_t height) {
|
||||||
frameBufferInit(&list->frame, width, height);
|
frameBufferInit(&list->frame, width, height);
|
||||||
quadInit(&list->quad, 0, 0,0,0,0, 1,1,1,1);
|
quadInit(&list->quad, 0, 0,0,0,0, 1,1,1,1);
|
||||||
dynArrayInit(&list->passes, sizeof(renderpass_t), passes);
|
list->passCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderpass_t * renderListGetPass(renderlist_t *list, int32_t pass) {
|
renderpass_t * renderListGetPass(renderlist_t *list, int32_t pass) {
|
||||||
return (renderpass_t *)dynArrayGet(&list->passes, pass);
|
return list->passes + pass;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t renderPassAdd(renderlist_t *list) {
|
int32_t renderPassAdd(renderlist_t *list) {
|
||||||
int32_t i = dynArrayAdd(&list->passes);
|
int32_t i = list->passCount++;
|
||||||
renderpass_t *pass = renderListGetPass(list, i);
|
renderpass_t *pass = renderListGetPass(list, i);
|
||||||
|
|
||||||
frameBufferInit(&pass->frame,
|
frameBufferInit(&pass->frame,
|
||||||
list->frame.texture.width, list->frame.texture.height
|
list->frame.texture.width, list->frame.texture.height
|
||||||
);
|
);
|
||||||
|
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
void renderListRenderPass(
|
void renderListRenderPass(
|
||||||
renderlist_t *list, engine_t *engine,
|
renderlist_t *list, engine_t *engine,
|
||||||
camera_t *camera, int32_t pass, dynarray_t *items
|
camera_t *camera, int32_t pass, renderitem_t *items, int32_t itemCount
|
||||||
) {
|
) {
|
||||||
int32_t i;
|
int32_t i;
|
||||||
renderpass_t *renderPass;
|
renderpass_t *renderPass;
|
||||||
@ -46,15 +44,13 @@ void renderListRenderPass(
|
|||||||
shaderUseCamera(renderPass->shader, camera);
|
shaderUseCamera(renderPass->shader, camera);
|
||||||
|
|
||||||
// Render list
|
// Render list
|
||||||
for(i = 0; i < items->length; i++) {
|
for(i = 0; i < itemCount; i++) {
|
||||||
item = (renderitem_t *)dynArrayGet(items, i);
|
item = items + i;
|
||||||
item->onRender(list, renderPass, engine, i);
|
item->onRender(list, renderPass, engine, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
renderResetFramebuffer(&engine->render);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void renderListRender(renderlist_t *list, engine_t *engine, shader_t *shader) {
|
void renderListRender(renderlist_t *list, shader_t *shader) {
|
||||||
camera_t camera;
|
camera_t camera;
|
||||||
int32_t i;
|
int32_t i;
|
||||||
renderpass_t *pass;
|
renderpass_t *pass;
|
||||||
@ -64,7 +60,7 @@ void renderListRender(renderlist_t *list, engine_t *engine, shader_t *shader) {
|
|||||||
cameraOrtho(&camera, 0,1, 0,1, 0.5f, 1.5f);
|
cameraOrtho(&camera, 0,1, 0,1, 0.5f, 1.5f);
|
||||||
|
|
||||||
// Bind the framebuffer
|
// Bind the framebuffer
|
||||||
frameBufferUse(&list->frame, false);
|
frameBufferUse(&list->frame, true);
|
||||||
|
|
||||||
// Set the shader
|
// Set the shader
|
||||||
shaderUse(shader);
|
shaderUse(shader);
|
||||||
@ -72,11 +68,31 @@ void renderListRender(renderlist_t *list, engine_t *engine, shader_t *shader) {
|
|||||||
shaderUseCamera(shader, &camera);
|
shaderUseCamera(shader, &camera);
|
||||||
|
|
||||||
// Render each pass.
|
// Render each pass.
|
||||||
for(i = 0; i < list->passes.length; i++) {
|
for(i = 0; i < list->passCount; i++) {
|
||||||
pass = renderListGetPass(list, i);
|
pass = renderListGetPass(list, i);
|
||||||
shaderUseTexture(shader, &pass->frame.texture);
|
shaderUseTexture(shader, &pass->frame.texture);
|
||||||
primitiveDraw(&list->quad, 0, -1);
|
primitiveDraw(&list->quad, 0, -1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void renderListAsBackbuffer(
|
||||||
|
renderlist_t *list, engine_t *engine, shader_t *shader
|
||||||
|
) {
|
||||||
|
camera_t camera;
|
||||||
|
|
||||||
|
// Reset to backbuffer
|
||||||
renderResetFramebuffer(&engine->render);
|
renderResetFramebuffer(&engine->render);
|
||||||
|
|
||||||
|
// Setup camera to look right at teh quad.
|
||||||
|
cameraLookAt(&camera, 0,0,1, 0,0,0);
|
||||||
|
cameraOrtho(&camera, 0,1, 0,1, 0.5f, 1.5f);
|
||||||
|
|
||||||
|
// Set up the shader.
|
||||||
|
shaderUse(shader);
|
||||||
|
shaderUseTexture(shader, &list->frame.texture);
|
||||||
|
shaderUseCamera(shader, &camera);
|
||||||
|
shaderUsePosition(shader, 0,0,0, 0,0,0);
|
||||||
|
|
||||||
|
// Render the quad to the back buffer.
|
||||||
|
primitiveDraw(&list->quad, 0, -1);
|
||||||
}
|
}
|
@ -16,6 +16,8 @@
|
|||||||
#include "../util/dynarray.h"
|
#include "../util/dynarray.h"
|
||||||
#include "render.h"
|
#include "render.h"
|
||||||
|
|
||||||
|
#define RENDER_PASSES_MAX 8
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
framebuffer_t frame;
|
framebuffer_t frame;
|
||||||
shader_t *shader;
|
shader_t *shader;
|
||||||
@ -25,7 +27,8 @@ typedef struct {
|
|||||||
framebuffer_t frame;
|
framebuffer_t frame;
|
||||||
primitive_t quad;
|
primitive_t quad;
|
||||||
|
|
||||||
dynarray_t passes;
|
renderpass_t passes[RENDER_PASSES_MAX];
|
||||||
|
int32_t passCount;
|
||||||
void *user;
|
void *user;
|
||||||
} renderlist_t;
|
} renderlist_t;
|
||||||
|
|
||||||
@ -37,12 +40,16 @@ typedef struct {
|
|||||||
renderitemcallback_t *onRender;
|
renderitemcallback_t *onRender;
|
||||||
} renderitem_t;
|
} renderitem_t;
|
||||||
|
|
||||||
void renderListInit(renderlist_t *list, int32_t passes, int32_t width, int32_t height);
|
void renderListInit(renderlist_t *list, int32_t width, int32_t height);
|
||||||
renderpass_t * renderListGetPass(renderlist_t *list, int32_t pass);
|
renderpass_t * renderListGetPass(renderlist_t *list, int32_t pass);
|
||||||
int32_t renderPassAdd(renderlist_t *list);
|
int32_t renderPassAdd(renderlist_t *list);
|
||||||
void renderListRenderPass(
|
void renderListRenderPass(
|
||||||
renderlist_t *list, engine_t *engine,
|
renderlist_t *list, engine_t *engine,
|
||||||
camera_t *camera, int32_t pass, dynarray_t *items
|
camera_t *camera, int32_t pass, renderitem_t *items, int32_t itemCount
|
||||||
);
|
);
|
||||||
|
|
||||||
void renderListRender(renderlist_t *list, engine_t *engine, shader_t *shader);
|
void renderListRender(renderlist_t *list, shader_t *shader);
|
||||||
|
|
||||||
|
void renderListAsBackbuffer(
|
||||||
|
renderlist_t *list, engine_t *engine, shader_t *shader
|
||||||
|
);
|
@ -7,12 +7,52 @@
|
|||||||
|
|
||||||
#include "dawngame.h"
|
#include "dawngame.h"
|
||||||
|
|
||||||
|
shader_t shader;
|
||||||
|
primitive_t cube;
|
||||||
|
texture_t texture;
|
||||||
|
renderitem_t items[32];
|
||||||
|
int32_t itemCount;
|
||||||
|
|
||||||
|
void _renderTest(
|
||||||
|
renderlist_t *list, renderpass_t *pass, engine_t *engine, int32_t i
|
||||||
|
) {
|
||||||
|
shaderUsePosition(pass->shader, 0,0,0, 0,engine->time.current,0);
|
||||||
|
shaderUseTexture(pass->shader, &texture);
|
||||||
|
primitiveDraw(&cube, 0, -1);
|
||||||
|
}
|
||||||
|
|
||||||
bool dawnGameInit(dawngame_t *game) {
|
bool dawnGameInit(dawngame_t *game) {
|
||||||
|
renderListInit(&game->renderList, 512, 512);
|
||||||
|
|
||||||
|
assetShaderLoad(&shader, "shaders/textured.vert", "shaders/textured.frag");
|
||||||
|
assetTextureLoad(&texture, "test_texture.png");
|
||||||
|
cubeInit(&cube, 1, 1, 1);
|
||||||
|
|
||||||
|
items[itemCount++].onRender = &_renderTest;
|
||||||
|
|
||||||
|
int32_t passNumber = renderPassAdd(&game->renderList);
|
||||||
|
renderpass_t *pass = renderListGetPass(&game->renderList, passNumber);
|
||||||
|
pass->shader = &shader;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void dawnGameUpdate(dawngame_t *game) {
|
void dawnGameUpdate(dawngame_t *game) {
|
||||||
|
camera_t camera;
|
||||||
|
|
||||||
|
cameraPerspective(&camera, 45.0f, 512.0f/512.0f, 0.01f, 100.0f);
|
||||||
|
cameraLookAt(&camera, 3,3,3, 0,0,0);
|
||||||
|
|
||||||
|
// Render First Pass
|
||||||
|
renderListRenderPass(
|
||||||
|
&game->renderList, &game->engine, &camera, 0, items, itemCount
|
||||||
|
);
|
||||||
|
|
||||||
|
// Render the list itself.
|
||||||
|
renderListRender(&game->renderList, &shader);
|
||||||
|
|
||||||
|
// Render that to the backbuffer.
|
||||||
|
renderListAsBackbuffer(&game->renderList, &game->engine, &shader);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dawnGameDispose(dawngame_t *game) {
|
void dawnGameDispose(dawngame_t *game) {
|
||||||
|
@ -8,9 +8,17 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "../../libs.h"
|
#include "../../libs.h"
|
||||||
#include "../../engine/engine.h"
|
#include "../../engine/engine.h"
|
||||||
|
#include "../../display/renderlist.h"
|
||||||
|
#include "../../display/shader.h"
|
||||||
|
#include "../../display/texture.h"
|
||||||
|
#include "../../display/primitives/cube.h"
|
||||||
|
#include "../../display/primitive.h"
|
||||||
|
#include "../../file/asset.h"
|
||||||
|
#include "../../util/dynarray.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
engine_t engine;
|
engine_t engine;
|
||||||
|
renderlist_t renderList;
|
||||||
} dawngame_t;
|
} dawngame_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -84,7 +84,7 @@ void pokerUiUpdate(
|
|||||||
|
|
||||||
// Render the VN character
|
// Render the VN character
|
||||||
shaderUseCamera(shader, &camera);
|
shaderUseCamera(shader, &camera);
|
||||||
shaderUsePosition(shader, 0,0,0, 0,0,0);
|
// shaderUsePosition(shader, 0,0,0, 0,0,0);
|
||||||
vnCharacterRender(characters + i, shader);
|
vnCharacterRender(characters + i, shader);
|
||||||
|
|
||||||
// Increment
|
// Increment
|
||||||
|
Reference in New Issue
Block a user