Browse Source

add renAllocateGroup()

testing
cinnaboot 6 years ago
parent
commit
6ca8cfff2b
  1. 34
      examples/assimp_loading/main.cpp
  2. 1
      include/entity.h
  3. 1
      include/render_object.h
  4. 11
      include/renderer.h
  5. 1
      include/shader_program.h
  6. 22
      src/entity.cpp
  7. 20
      src/renderer.cpp

34
examples/assimp_loading/main.cpp

@ -17,7 +17,7 @@ doFrameCallback(render_state* rs)
}
void
doRenderLoop(render_state* rs, frame_callback_fn callback_fn, entity* entities, uint entity_count)
doRenderLoop(render_state* rs, frame_callback_fn callback_fn)
{
// TODO: move frame delay to renderFrame()
const uint TARGET_FPS = 60;
@ -29,7 +29,8 @@ doRenderLoop(render_state* rs, frame_callback_fn callback_fn, entity* entities,
while (running) {
frameStart = SDL_GetTicks();
// TODO: add a better structure for input, and provide a callback to use here
// TODO: add a better structure for input, and provide a callback to use
// here
while (SDL_PollEvent(&e)) {
if ((e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)
|| e.type == SDL_QUIT) {
@ -39,13 +40,6 @@ doRenderLoop(render_state* rs, frame_callback_fn callback_fn, entity* entities,
callback_fn(rs);
// TODO: entity pointer and entity count should be stored somewhere on the render_state object
// TODO: render_group should track a group of entity objects. the entity objects
// should keep track of their own render_objects?
/*
* render_group -> entities -> render_object(s)
* -> mesh_info ?
*/
renRenderFrame(rs);
SDL_GL_SwapWindow(rs->handles.window);
frameTime = SDL_GetTicks() - frameStart;
@ -61,13 +55,15 @@ doRenderLoop(render_state* rs, frame_callback_fn callback_fn, entity* entities,
int
main()
{
// TODO: would be nice to be able to pass in viewport_dims, window title here
// TODO: would be nice to be able to pass in viewport_dims, window title
// here
render_state* rs = renInit();
meInitAssimp();
// TODO: entInit() doesn't allocate memory because we want to do the allocation in
// one big block, but this is really clunky to use
entity spaceship;
// TODO: entInit() doesn't allocate memory because we want to do the
// allocation in one big block, but this is really clunky to use
render_group* group_1 = renAllocateGroup(1, *rs->default_shader);
entity spaceship = group_1->entities[0];
// TODO: this should be handled in entInit
entSetWorldPosition(spaceship, 0, 0, 0);
@ -83,14 +79,14 @@ main()
glm::vec3(0,0,1)
);
// TODO: renderer::setDefaults() allocates 10 lights based on a MACRO in renderer.cpp
// probably need an interface to add more than that
// add a light
// TODO: renderer::setDefaults() allocates 10 lights based on a MACRO in
// renderer.cpp probably need an interface to add more than that add a
// light
rs->num_lights = 1;
rs->lights[0].position = glm::vec3(200, -150, 150);
// TODO: look into setting up git-annex for large files. git-lfs works fine for gitlab,
// but has no real implementation for self-hosting:
// TODO: look into setting up git-annex for large files. git-lfs works fine
// for gitlab, but has no real implementation for self-hosting:
// https://github.com/git-lfs/git-lfs/issues/1044
// https://git-annex.branchable.com/
//
@ -98,7 +94,7 @@ main()
logDebugAnimationInfo("../data/spaceship.glb");
if (entInit(spaceship, "../data/spaceship.glb"))
doRenderLoop(rs, doFrameCallback, &spaceship, 1);
doRenderLoop(rs, doFrameCallback);
else
LOG(Error) << "Error initializing entity, exiting\n";

1
include/entity.h

@ -32,6 +32,7 @@ bool entInit(entity& e, const char* model_path);
void entFree(entity& e);
// TODO: just use glm::vec3 here also
void entSetWorldPosition(entity& e, float x, float y, float z);
void entTranslate(entity& e, glm::vec3 v);

1
include/render_object.h

@ -16,6 +16,7 @@ struct render_object
GLuint index_buffer_id;
};
// TODO: make use of glIsBuffer/glDeleteBuffers
void roFree(render_object* ro);
// TODO: implement me!

11
include/renderer.h

@ -30,7 +30,6 @@ struct point_light
float intensity;
};
/*
// NOTE: array of entities rendered with the same shader program
struct render_group
{
@ -39,7 +38,6 @@ struct render_group
shader_program shader;
};
*/
struct render_state
{
@ -49,8 +47,10 @@ struct render_state
camera cam;
util_RGBA clear_col;
//render_group* render_groups;
//uint render_group_count;
render_group** render_groups;
uint render_group_count;
shader_program* default_shader;
point_light* lights;
uint num_lights;
@ -61,5 +61,8 @@ render_state* renInit();
void renShutdown(render_state* rs);
render_group*
renAllocateGroup(uint entity_count, shader_program shader);
void renRenderFrame(render_state* rs);

1
include/shader_program.h

@ -20,3 +20,4 @@ struct shader_program
shader_program* shaderInit(const char* vertex_code, const char* frag_code);
// TODO: make use of glDeleteShader/glDeleteProgram in eg) shaderFree()

22
src/entity.cpp

@ -5,19 +5,27 @@
#include "entity.h"
// forward declarations
bool loadMeshIntoGL(entity& e);
#if 0
bool initEntityROs(entity& e);
bool convertMeshInfo(meMeshInfo* mesh, render_object* ro, bool use_normals, bool use_texture);
#endif
// interface
bool
entInit(entity& e, const char* model_path)
{
e.world_transform = glm::mat4(1.0);
entScale(e, glm::vec3(1.0));
if (meLoadFromFile(e.mesh_group, model_path)) {
entSetWorldPosition(e, 0, 0, 0);
if (meLoadFromFile(e.mesh_group, model_path)
&& loadMeshIntoGL(e))
{
#if 0
initEntityRG(e, shader, e.mesh_group.use_normals);
@ -64,6 +72,16 @@ entScale(entity& e, glm::vec3 v)
e.world_transform = glm::scale(e.world_transform, v);
}
// internal
bool
loadMeshIntoGL(entity& e)
{
LOG(Error) << "TODO: redo GL init for new render_object\n";
return false;
}
#if 0
void
initEntityRG(entity& e, rg_shader_program& shader, bool use_normals)

20
src/renderer.cpp

@ -48,13 +48,21 @@ renInit()
initContext(rs->handles) &&
initGlOptions())
{
rs->default_shader =
shaderInit(DEFAULT_VERTEX_SHADER, DEFAULT_FRAGMENT_SHADER);
if (rs->default_shader != nullptr) {
return rs;
} else {
LOG(Error) << "renderer initialization failed, aborting\n";
LOG(Error) << "shader loading failed\n";
return nullptr;
}
}
LOG(Error) << "renderer initialization failed, aborting\n";
return nullptr;
}
void
renShutdown(render_state* rs)
{
@ -64,6 +72,16 @@ renShutdown(render_state* rs)
SDL_Quit();
}
render_group*
renAllocateGroup(uint entity_count, shader_program shader)
{
assert(entity_count > 0);
render_group* rg = UTIL_ALLOC(1, render_group);
rg->entities = UTIL_ALLOC(entity_count, entity);
rg->shader = shader;
return rg;
}
void
renRenderFrame(render_state* rs)
{

Loading…
Cancel
Save