Browse Source

load lights from json scene

master
cinnaboot 8 years ago
parent
commit
99b07ecfc3
  1. 2
      data/test_scene.json
  2. 12
      src/hexgame.cpp
  3. 12
      src/renderer.cpp
  4. 3
      src/renderer.h
  5. 17
      src/scene_loader.cpp
  6. 2
      src/scene_loader.h

2
data/test_scene.json

@ -86,7 +86,7 @@
"position" : {
"x" : 0,
"y" : 0,
"z" : 0
"z" : 100
}
}
]

12
src/hexgame.cpp

@ -40,8 +40,6 @@
#define SCENE_SCHEMA_FILE "scene_schema.json"
#define MAX_ENTITIES 1000
#define RS_MAX_LIGHTS 10 // NOTE: needs to match the fragment shader source
#include <vector>
#if defined(_WIN32)
@ -484,7 +482,6 @@ int main(int argc, char* argv[])
g_render_state = UTIL_ALLOC(1, render_state);
g_render_state->is_debug_draw = DEBUG_DRAW;
g_render_state->viewport_dims = v2i(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
g_render_state->max_lights = RS_MAX_LIGHTS;
SDL_Handles handles;
@ -493,7 +490,7 @@ int main(int argc, char* argv[])
return 1;
}
if (!initRenderer(handles, g_render_state->viewport_dims)) {
if (!initRenderer(g_render_state, handles)) {
LOG(ERROR) << "Unable to initialize graphics, exiting\n";
return 1;
}
@ -543,7 +540,12 @@ int main(int argc, char* argv[])
slParseCamera(sd, renGetCamera());
slParseHexGrid(sd, g->grid);
slParseLights(sd, rs->lights, rs->num_lights, rs->max_lights);
if (!slParseLights(sd, rs->lights, rs->num_lights, rs->max_lights)) {
LOG(ERROR) << "Error loading lights, exiting\n";
return 1;
}
slFreeSceneDoc(sd);
} else {
LOG(ERROR) << "Error loading scene, exiting\n";

12
src/renderer.cpp

@ -27,6 +27,7 @@
#define PROJ_TYPE PERSPECTIVE
#define DEFAULT_VERTEX_SHADER_FILE "../data/default.vs"
#define DEFAULT_FRAGMENT_SHADER_FILE "../data/default.fs"
#define MAX_LIGHTS 10 // NOTE: needs to match the fragment shader source
typedef struct clear_col
{
@ -76,7 +77,7 @@ static camera g_camera;
// TODO: maybe make this a contructor for render_state?
bool
initRenderer(SDL_Handles &handles, v2i vpDims)
initRenderer(render_state* rs, SDL_Handles &handles)
{
SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
@ -88,7 +89,7 @@ initRenderer(SDL_Handles &handles, v2i vpDims)
SDL_GetCurrentDisplayMode(0, &handles.currentDisplayMode);
handles.window =
SDL_CreateWindow("hexgame", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
vpDims.x, vpDims.y, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);
rs->viewport_dims.x, rs->viewport_dims.y, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);
if (!handles.window) {
LOG(ERROR) << "Error creating window: " << SDL_GetError() << "\n";
@ -141,6 +142,9 @@ initRenderer(SDL_Handles &handles, v2i vpDims)
utilSafeFree(vs_code);
utilSafeFree(fs_code);
rs->max_lights = MAX_LIGHTS;
rs->lights = UTIL_ALLOC(rs->max_lights, rg_point_light);
if (shader_error) {
LOG(ERROR) << "Error initializing shader program\n";
return false;
@ -264,9 +268,7 @@ createScene(render_state* rs, std::vector<hex_info>* hexes, Entity* entities, ui
// TODO: load light properties from scene/level files
// light testing
// TODO: allocate this in scene_loader... or initRenderer?
rs->lights = UTIL_ALLOC(rs->max_lights, rg_point_light);
#if 1
#if 0
rs->lights[0].light_ID = 0;
rs->lights[0].position = glm::vec3(0.f, 0.f, 200.f);
rs->lights[0].color = glm::vec3(1.f, 1.f, 1.f);

3
src/renderer.h

@ -30,6 +30,7 @@ struct render_state
{
v2i viewport_dims;
bool is_debug_draw;
// TODO: maybe add handles reference here?
// TODO: testing lighting
rg_point_light* lights = nullptr;
@ -37,7 +38,7 @@ struct render_state
uint max_lights = 0;
};
bool initRenderer(SDL_Handles &handles, v2i vpDims);
bool initRenderer(render_state* rs, SDL_Handles &handles);
void freeBuffers(render_state* rs);
bool addTexture(SDL_Handles &handles, const char * path);
camera& renGetCamera();

17
src/scene_loader.cpp

@ -146,10 +146,23 @@ slParseHexGrid(slSceneDoc* sd, hexgrid& hg)
}
void
bool
slParseLights(slSceneDoc* sd, rg_point_light* lights, uint& num_lights, uint max_lights)
{
//const rapidjson::Value& json_lights = (*sd->doc)["lights"];
const rapidjson::Value& json_lights = (*sd->doc)["lights"];
if (json_lights.Size() > max_lights) {
LOG(ERROR) << "Too many lights\n";
return false;
}
num_lights = json_lights.Size();
for (uint i = 0; i < num_lights; i++) {
lights[i].position = parseVec3(json_lights[i]["position"]);
}
return true;
}

2
src/scene_loader.h

@ -22,4 +22,4 @@ bool slParseEntities(
void slParseCamera(slSceneDoc* sd, camera& cam);
void slParseHexGrid(slSceneDoc* sd, hexgrid& hg);
void slParseLights(slSceneDoc* sd, rg_point_light* lights, uint& num_lights, uint max_lights);
bool slParseLights(slSceneDoc* sd, rg_point_light* lights, uint& num_lights, uint max_lights);

Loading…
Cancel
Save