|
|
|
@ -24,11 +24,11 @@ struct slSceneDoc |
|
|
|
bool parseFile(rapidjson::Document* doc, const char* data_dir, const char* file_name); |
|
|
|
bool parseFile(rapidjson::Document* doc, const char* data_dir, const char* file_name); |
|
|
|
glm::vec3 parseVec3(const rapidjson::Value& node); |
|
|
|
glm::vec3 parseVec3(const rapidjson::Value& node); |
|
|
|
glm::vec4 parseVec4(const rapidjson::Value& node); |
|
|
|
glm::vec4 parseVec4(const rapidjson::Value& node); |
|
|
|
uint32 parseHex32(std::string s); |
|
|
|
|
|
|
|
bool validateScene(rapidjson::Document* schema_doc, rapidjson::Document* scene_doc, |
|
|
|
bool validateScene(rapidjson::Document* schema_doc, rapidjson::Document* scene_doc, |
|
|
|
const char* scene_file); |
|
|
|
const char* scene_file); |
|
|
|
void populateFilledHexGLBuffers(hexgrid& hg, render_group* rg_filled); |
|
|
|
void populateFilledHexGLBuffers(hexgrid& hg, render_group* rg_filled); |
|
|
|
void populateLineGLBuffers(hexgrid& hg, render_group* rg_lines); |
|
|
|
void populateLineGLBuffers(hexgrid& hg, render_group* rg_lines); |
|
|
|
|
|
|
|
void setHexBufferCount(render_object* ro, uint count); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// interface
|
|
|
|
// interface
|
|
|
|
@ -150,16 +150,19 @@ slParseHexGrid(slSceneDoc* sd, hexgrid& hg, util_image& palette_image) |
|
|
|
bool |
|
|
|
bool |
|
|
|
slCreateHexRenderGroups(hexgrid& hg, render_state* rs) |
|
|
|
slCreateHexRenderGroups(hexgrid& hg, render_state* rs) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
assert(hg.hex_map.size() < MAX_HEX_COUNT); |
|
|
|
|
|
|
|
|
|
|
|
// NOTE: 6 triangles * 3 vertices per triangle * 3 floats per vertex
|
|
|
|
// NOTE: 6 triangles * 3 vertices per triangle * 3 floats per vertex
|
|
|
|
uint buf_len = hg.hex_map.size() * 6 * 3 * 3; |
|
|
|
uint buf_len = MAX_HEX_COUNT * 6 * 3 * 3; |
|
|
|
rs->filled_hex_render_group = rgInitSingle(rs->default_shader, buf_len, true); |
|
|
|
rs->filled_hex_render_group = rgInitSingle(rs->default_shader, buf_len, true); |
|
|
|
|
|
|
|
render_group* rg_filled = rs->filled_hex_render_group; |
|
|
|
|
|
|
|
setHexBufferCount(rg_filled->render_objects[0], hg.hex_map.size() * 54); |
|
|
|
|
|
|
|
|
|
|
|
// NOTE: 6 lines * 2 vertices per line * 3 floats per vertex
|
|
|
|
// NOTE: 6 lines * 2 vertices per line * 3 floats per vertex
|
|
|
|
buf_len = hg.hex_map.size() * 6 * 2 * 3; |
|
|
|
buf_len = MAX_HEX_COUNT * 6 * 2 * 3; |
|
|
|
rs->hex_line_render_group = rgInitSingle(rs->default_shader, buf_len, true, 0, GL_LINES); |
|
|
|
rs->hex_line_render_group = rgInitSingle(rs->default_shader, buf_len, true, 0, GL_LINES); |
|
|
|
|
|
|
|
|
|
|
|
render_group* rg_filled = rs->filled_hex_render_group; |
|
|
|
|
|
|
|
render_group* rg_lines = rs->hex_line_render_group; |
|
|
|
render_group* rg_lines = rs->hex_line_render_group; |
|
|
|
|
|
|
|
setHexBufferCount(rg_lines->render_objects[0], hg.hex_map.size() * 36); |
|
|
|
|
|
|
|
|
|
|
|
if ((rg_filled == nullptr) || (rg_lines == nullptr)) { |
|
|
|
if ((rg_filled == nullptr) || (rg_lines == nullptr)) { |
|
|
|
LOG(ERROR) << "Error allocating render_group, exiting\n"; |
|
|
|
LOG(ERROR) << "Error allocating render_group, exiting\n"; |
|
|
|
@ -292,13 +295,13 @@ populateFilledHexGLBuffers(hexgrid& hg, render_group* rg_filled) |
|
|
|
gl_buffer& normal_buf = ro->normal_buffer; |
|
|
|
gl_buffer& normal_buf = ro->normal_buffer; |
|
|
|
gl_buffer& uv_buf = ro->uv_buffer; |
|
|
|
gl_buffer& uv_buf = ro->uv_buffer; |
|
|
|
|
|
|
|
|
|
|
|
assert((hg.hex_map.size() * 6 * 3 * 3) == vbuf.buffer_len); |
|
|
|
assert((hg.hex_map.size() * 6 * 3 * 3) == vbuf.count); |
|
|
|
|
|
|
|
|
|
|
|
// fill uv_buffer with palette texture coords
|
|
|
|
// fill uv_buffer with palette texture coords
|
|
|
|
hgUpdateUVBuffer(hg, uv_buf.buffer, uv_buf.buffer_len); |
|
|
|
hgUpdateUVBuffer(hg, uv_buf.buffer, uv_buf.count); |
|
|
|
|
|
|
|
|
|
|
|
// cheat at vertex normals since all hexes lay flat on z-axis
|
|
|
|
// cheat at vertex normals since all hexes lay flat on z-axis
|
|
|
|
for (uint i = 0; i < normal_buf.buffer_len; i += 3) { |
|
|
|
for (uint i = 0; i < normal_buf.count; i += 3) { |
|
|
|
normal_buf.buffer[i] = 0.f; |
|
|
|
normal_buf.buffer[i] = 0.f; |
|
|
|
normal_buf.buffer[i + 1] = 0.f; |
|
|
|
normal_buf.buffer[i + 1] = 0.f; |
|
|
|
normal_buf.buffer[i + 2] = 1.f; |
|
|
|
normal_buf.buffer[i + 2] = 1.f; |
|
|
|
@ -349,17 +352,17 @@ populateLineGLBuffers(hexgrid& hg, render_group* rg_lines) |
|
|
|
gl_buffer& normal_buf = ro->normal_buffer; |
|
|
|
gl_buffer& normal_buf = ro->normal_buffer; |
|
|
|
gl_buffer& uv_buf = ro->uv_buffer; |
|
|
|
gl_buffer& uv_buf = ro->uv_buffer; |
|
|
|
|
|
|
|
|
|
|
|
assert((hg.hex_map.size() * 6 * 2 * 3) == vbuf.buffer_len); |
|
|
|
assert((hg.hex_map.size() * 6 * 2 * 3) == vbuf.count); |
|
|
|
|
|
|
|
|
|
|
|
// cheat at vertex normals since all hexes lay flat on z-axis
|
|
|
|
// cheat at vertex normals since all hexes lay flat on z-axis
|
|
|
|
for (uint i = 0; i < normal_buf.buffer_len; i += 3) { |
|
|
|
for (uint i = 0; i < normal_buf.count; i += 3) { |
|
|
|
normal_buf.buffer[i] = 0.f; |
|
|
|
normal_buf.buffer[i] = 0.f; |
|
|
|
normal_buf.buffer[i + 1] = 0.f; |
|
|
|
normal_buf.buffer[i + 1] = 0.f; |
|
|
|
normal_buf.buffer[i + 2] = 1.f; |
|
|
|
normal_buf.buffer[i + 2] = 1.f; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// fill uv_buffer with palette texture coords
|
|
|
|
// fill uv_buffer with palette texture coords
|
|
|
|
for (uint i = 0; i < uv_buf.buffer_len; i += 3) { |
|
|
|
for (uint i = 0; i < uv_buf.count; i += 3) { |
|
|
|
uv_buf.buffer[i + 0] = hg.line_color_uv.x; |
|
|
|
uv_buf.buffer[i + 0] = hg.line_color_uv.x; |
|
|
|
uv_buf.buffer[i + 1] = hg.line_color_uv.y; |
|
|
|
uv_buf.buffer[i + 1] = hg.line_color_uv.y; |
|
|
|
uv_buf.buffer[i + 2] = 0; |
|
|
|
uv_buf.buffer[i + 2] = 0; |
|
|
|
@ -391,3 +394,14 @@ populateLineGLBuffers(hexgrid& hg, render_group* rg_lines) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
|
|
|
setHexBufferCount(render_object* ro, uint count) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
assert(ro != nullptr); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// NOTE: hexgrid buffers aren't indexed
|
|
|
|
|
|
|
|
ro->vertex_buffer.count = count; |
|
|
|
|
|
|
|
ro->normal_buffer.count = count; |
|
|
|
|
|
|
|
ro->uv_buffer.count = count; |
|
|
|
|
|
|
|
} |
|
|
|
|