Merge branch 'working'
This commit is contained in:
commit
335565a86f
@ -1,4 +1,4 @@
|
|||||||
// stb_voxel_render.h - v0.84 - Sean Barrett, 2015 - public domain
|
// stb_voxel_render.h - v0.85 - Sean Barrett, 2015 - public domain
|
||||||
//
|
//
|
||||||
// This library helps render large-scale "voxel" worlds for games,
|
// This library helps render large-scale "voxel" worlds for games,
|
||||||
// in this case, one with blocks that can have textures and that
|
// in this case, one with blocks that can have textures and that
|
||||||
@ -13,7 +13,7 @@
|
|||||||
// It works by creating triangle meshes. The library includes
|
// It works by creating triangle meshes. The library includes
|
||||||
//
|
//
|
||||||
// - converter from dense 3D arrays of block info to vertex mesh
|
// - converter from dense 3D arrays of block info to vertex mesh
|
||||||
// - shader for the vertex mesh
|
// - vertex & fragment shaders for the vertex mesh
|
||||||
// - assistance in setting up shader state
|
// - assistance in setting up shader state
|
||||||
//
|
//
|
||||||
// For portability, none of the library code actually accesses
|
// For portability, none of the library code actually accesses
|
||||||
@ -24,8 +24,9 @@
|
|||||||
// yourself. However, you could also try making a game with
|
// yourself. However, you could also try making a game with
|
||||||
// a small enough world that it's fully loaded rather than
|
// a small enough world that it's fully loaded rather than
|
||||||
// streaming. Currently the preferred vertex format is 20 bytes
|
// streaming. Currently the preferred vertex format is 20 bytes
|
||||||
// per quad. There are plans to allow much more compact formats
|
// per quad. There are designs to allow much more compact formats
|
||||||
// with a slight reduction in shader features.
|
// with a slight reduction in shader features, but no roadmap
|
||||||
|
// for actually implementing them.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// USAGE
|
// USAGE
|
||||||
@ -108,7 +109,7 @@
|
|||||||
// and avoids a potential slow path (gathering non-uniform
|
// and avoids a potential slow path (gathering non-uniform
|
||||||
// data from uniforms) on some hardware.
|
// data from uniforms) on some hardware.
|
||||||
//
|
//
|
||||||
// In the future I hope to add additional modes that have significantly
|
// In the future I might add additional modes that have significantly
|
||||||
// smaller meshes but reduce features, down as small as 6 bytes per quad.
|
// smaller meshes but reduce features, down as small as 6 bytes per quad.
|
||||||
// See elsewhere in this file for a table of candidate modes. Switching
|
// See elsewhere in this file for a table of candidate modes. Switching
|
||||||
// to a mode will require changing some of your mesh creation code, but
|
// to a mode will require changing some of your mesh creation code, but
|
||||||
@ -187,10 +188,11 @@
|
|||||||
// Sean Barrett github:r-leyh Jesus Fernandez
|
// Sean Barrett github:r-leyh Jesus Fernandez
|
||||||
// Miguel Lechon github:Arbeiterunfallversicherungsgesetz
|
// Miguel Lechon github:Arbeiterunfallversicherungsgesetz
|
||||||
// Thomas Frase James Hofmann
|
// Thomas Frase James Hofmann
|
||||||
// Stephen Olsen
|
// Stephen Olsen github:guitarfreak
|
||||||
//
|
//
|
||||||
// VERSION HISTORY
|
// VERSION HISTORY
|
||||||
//
|
//
|
||||||
|
// 0.85 (2017-03-03) add block_selector (by guitarfreak)
|
||||||
// 0.84 (2016-04-02) fix GLSL syntax error on glModelView path
|
// 0.84 (2016-04-02) fix GLSL syntax error on glModelView path
|
||||||
// 0.83 (2015-09-13) remove non-constant struct initializers to support more compilers
|
// 0.83 (2015-09-13) remove non-constant struct initializers to support more compilers
|
||||||
// 0.82 (2015-08-01) added input.packed_compact to store rot, vheight & texlerp efficiently
|
// 0.82 (2015-08-01) added input.packed_compact to store rot, vheight & texlerp efficiently
|
||||||
@ -262,7 +264,7 @@ extern "C" {
|
|||||||
// modes 0,1,20,21, Z in the mesh can extend to 511 instead
|
// modes 0,1,20,21, Z in the mesh can extend to 511 instead
|
||||||
// of 255. However, half-height blocks cannot be used.
|
// of 255. However, half-height blocks cannot be used.
|
||||||
//
|
//
|
||||||
// All of the following just #ifdef tested so need no values, and are optional.
|
// All of the following are just #ifdef tested so need no values, and are optional.
|
||||||
//
|
//
|
||||||
// STBVOX_CONFIG_BLOCKTYPE_SHORT
|
// STBVOX_CONFIG_BLOCKTYPE_SHORT
|
||||||
// use unsigned 16-bit values for 'blocktype' in the input instead of 8-bit values
|
// use unsigned 16-bit values for 'blocktype' in the input instead of 8-bit values
|
||||||
@ -302,7 +304,7 @@ extern "C" {
|
|||||||
//
|
//
|
||||||
// STBVOX_CONFIG_DISABLE_TEX2
|
// STBVOX_CONFIG_DISABLE_TEX2
|
||||||
// This disables all processing of texture 2 in the shader in case
|
// This disables all processing of texture 2 in the shader in case
|
||||||
// you don't use it. Eventually this will be replaced with a mode
|
// you don't use it. Eventually this could be replaced with a mode
|
||||||
// that omits the unused data entirely.
|
// that omits the unused data entirely.
|
||||||
//
|
//
|
||||||
// STBVOX_CONFIG_TEX1_EDGE_CLAMP
|
// STBVOX_CONFIG_TEX1_EDGE_CLAMP
|
||||||
@ -2900,6 +2902,8 @@ static void stbvox_make_mesh_for_block(stbvox_mesh_maker *mm, stbvox_pos pos, in
|
|||||||
|
|
||||||
if (mm->input.selector)
|
if (mm->input.selector)
|
||||||
mesh = mm->input.selector[v_off];
|
mesh = mm->input.selector[v_off];
|
||||||
|
else if (mm->input.block_selector)
|
||||||
|
mesh = mm->input.block_selector[mm->input.blocktype[v_off]];
|
||||||
|
|
||||||
// check if we're going off the end
|
// check if we're going off the end
|
||||||
if (mm->output_cur[mesh][0] + mm->output_size[mesh][0]*6 > mm->output_end[mesh][0]) {
|
if (mm->output_cur[mesh][0] + mm->output_size[mesh][0]*6 > mm->output_end[mesh][0]) {
|
||||||
@ -3109,6 +3113,8 @@ static void stbvox_make_mesh_for_block_with_geo(stbvox_mesh_maker *mm, stbvox_po
|
|||||||
mesh = mm->default_mesh;
|
mesh = mm->default_mesh;
|
||||||
if (mm->input.selector)
|
if (mm->input.selector)
|
||||||
mesh = mm->input.selector[v_off];
|
mesh = mm->input.selector[v_off];
|
||||||
|
else if (mm->input.block_selector)
|
||||||
|
mesh = mm->input.block_selector[bt];
|
||||||
|
|
||||||
if (geo <= STBVOX_GEOM_ceil_slope_north_is_bottom) {
|
if (geo <= STBVOX_GEOM_ceil_slope_north_is_bottom) {
|
||||||
// this is the simple case, we can just use regular block gen with special vmesh calculated with vheight
|
// this is the simple case, we can just use regular block gen with special vmesh calculated with vheight
|
||||||
@ -3130,7 +3136,9 @@ static void stbvox_make_mesh_for_block_with_geo(stbvox_mesh_maker *mm, stbvox_po
|
|||||||
basevert = stbvox_vertex_encode(pos.x, pos.y, pos.z << STBVOX_CONFIG_PRECISION_Z, 0,0);
|
basevert = stbvox_vertex_encode(pos.x, pos.y, pos.z << STBVOX_CONFIG_PRECISION_Z, 0,0);
|
||||||
if (mm->input.selector) {
|
if (mm->input.selector) {
|
||||||
mesh = mm->input.selector[v_off];
|
mesh = mm->input.selector[v_off];
|
||||||
}
|
} else if (mm->input.block_selector)
|
||||||
|
mesh = mm->input.block_selector[bt];
|
||||||
|
|
||||||
|
|
||||||
// check if we're going off the end
|
// check if we're going off the end
|
||||||
if (mm->output_cur[mesh][0] + mm->output_size[mesh][0]*6 > mm->output_end[mesh][0]) {
|
if (mm->output_cur[mesh][0] + mm->output_size[mesh][0]*6 > mm->output_end[mesh][0]) {
|
||||||
@ -3351,6 +3359,9 @@ static void stbvox_make_mesh_for_block_with_geo(stbvox_mesh_maker *mm, stbvox_po
|
|||||||
simple_rot = mesh >> 4;
|
simple_rot = mesh >> 4;
|
||||||
mesh &= 15;
|
mesh &= 15;
|
||||||
}
|
}
|
||||||
|
if (mm->input.block_selector) {
|
||||||
|
mesh = mm->input.block_selector[bt];
|
||||||
|
}
|
||||||
|
|
||||||
// check if we're going off the end
|
// check if we're going off the end
|
||||||
if (mm->output_cur[mesh][0] + mm->output_size[mesh][0]*4 > mm->output_end[mesh][0]) {
|
if (mm->output_cur[mesh][0] + mm->output_size[mesh][0]*4 > mm->output_end[mesh][0]) {
|
||||||
|
Loading…
Reference in New Issue
Block a user