浏览代码

switch shader variation from runtime-with-tags to dynamic with #ifdefs;
support making all definitions static so you can have multiple copies of file (with different #ifdefs);
move all tables to end of file (this will have to be undone later because IIRC it's not compatible with C++ or with some compilers or something, but it'll make my life easier in the interim);

Sean Barrett 10 年之前
父节点
当前提交
c588d29e95
共有 3 个文件被更改,包括 303 次插入584 次删除
  1. 282 559
      stb_voxel_render.h
  2. 8 1
      tests/caveview/cave_mesher.c
  3. 13 24
      tests/caveview/cave_render.c

文件差异内容过多而无法显示
+ 282 - 559
stb_voxel_render.h


+ 8 - 1
tests/caveview/cave_mesher.c

@@ -16,6 +16,14 @@
 //#define VHEIGHT_TEST
 //#define STBVOX_OPTIMIZED_VHEIGHT
 
+#define STBVOX_ICONFIG_OPENGL_3_1_COMPATIBILITY
+#define STBVOX_CONFIG_OPENGL_MODELVIEW
+#define STBVOX_ICONFIG_TEXTURED
+#define STBVOX_ICONFIG_GLSL
+#define STBVOX_CONFIG_PREFER_TEXBUFFER
+//#define STBVOX_CONFIG_LIGHTING_SIMPLE
+#define STBVOX_CONFIG_FOG_SMOOTHSTEP
+
 #define STBVOX_ROTATION_IN_LIGHTING
 #define STB_VOXEL_RENDER_IMPLEMENTATION
 #include "stb_voxel_render.h"
@@ -606,7 +614,6 @@ void build_chunk(int chunk_x, int chunk_y, fast_chunk *fc_table[4][4], raw_mesh
    map->block_tex1_face = minecraft_tex1_for_blocktype;
    map->block_color_face = minecraft_color_for_blocktype;
    map->block_geometry = minecraft_geom_for_blocktype;
-   stbvox_config_set_z_precision(&rm->mm, 1);
 
    // we're going to build 4 meshes in parallel, each covering 2x2 chunks
    stbvox_reset_buffers(&rm->mm);

+ 13 - 24
tests/caveview/cave_render.c

@@ -191,7 +191,8 @@ void setup_uniforms(float pos[3])
    int i,j;
    step += 1.0f/60.0f;
    for (i=0; i < STBVOX_UNIFORM_count; ++i) {
-      stbvox_uniform_info *ui = stbvox_get_uniform_info(&g_mesh_maker, i);
+      stbvox_uniform_info raw, *ui=&raw;
+      stbvox_get_uniform_info(&raw, i);
       uniform_loc[i] = -1;
 
       if (i == STBVOX_UNIFORM_texscale || i == STBVOX_UNIFORM_texgen || i == STBVOX_UNIFORM_color_table)
@@ -231,7 +232,8 @@ void setup_uniforms(float pos[3])
                break;
 
             case STBVOX_UNIFORM_ambient: {
-               float bright = 0.75;
+               float bright = 1.0;
+               //float bright = 0.75;
                float amb[3][3];
 
                // ambient direction is sky-colored upwards
@@ -278,8 +280,11 @@ GLuint unitex[64], unibuf[64];
 void make_texture_buffer_for_uniform(int uniform, int slot)
 {
    GLenum type;
-   stbvox_uniform_info *ui = stbvox_get_uniform_info(&g_mesh_maker, uniform);
-   GLint uloc = stbgl_find_uniform(main_prog, ui->name);
+   stbvox_uniform_info raw, *ui=&raw;
+   GLint uloc;
+   
+   stbvox_get_uniform_info(ui, uniform);
+   uloc = stbgl_find_uniform(main_prog, ui->name);
 
    if (uniform == STBVOX_UNIFORM_color_table)
       ((float *)ui->default_value)[63*4+3] = 1.0f; // emissive
@@ -355,35 +360,19 @@ void render_init(void)
 {
    int i;
    char *binds[] = { "attr_vertex", "attr_face", NULL };
-   char vertex[5000];
-   int vertex_len;
-   char fragment[5000];
-   int fragment_len;
+   char *vertex;
+   char *fragment;
    int w=0,h=0;
 
    unsigned char *texdata = stbi_load("terrain.png", &w, &h, NULL, 4);
 
    stbvox_init_mesh_maker(&g_mesh_maker);
-   stbvox_config_use_gl(&g_mesh_maker, 1, 1);
    for (i=0; i < num_mesh_workers; ++i) {
       stbvox_init_mesh_maker(&mesh_data[i].rm.mm);
-      stbvox_config_use_gl(&mesh_data[i].rm.mm, 1,1);
    }
 
-   vertex_len = stbvox_get_vertex_shader(&g_mesh_maker, vertex, sizeof(vertex));
-   fragment_len = stbvox_get_fragment_shader(&g_mesh_maker, fragment, sizeof(fragment));
-
-   if (vertex_len < 0) {
-      ods("Vertex shader was too long!\n");
-      assert(0);
-      exit(1);
-   }
-   if (fragment_len < 0) {
-      ods("fragment shader was too long!\n");
-      assert(0);
-      exit(1);
-   }
-   ods("Shader lengths: %d %d\n", vertex_len, fragment_len);
+   vertex = stbvox_get_vertex_shader();
+   fragment = stbvox_get_fragment_shader();
 
    {
       char error_buffer[1024];

部分文件因为文件数量过多而无法显示