Skip to content

Commit

Permalink
Refactored code a bit - reordered some staff and made calculation of …
Browse files Browse the repository at this point in the history
…vertical distance to terrain simpler
  • Loading branch information
sopyer committed May 1, 2012
1 parent a8f4164 commit 4bf49ea
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 30 deletions.
12 changes: 8 additions & 4 deletions Samples/exest/CDLODTerrain.cpp
Expand Up @@ -322,7 +322,7 @@ void CDLODTerrain::selectQuadsForDrawing(size_t level, float bx, float bz, float
skipFrustumTest = result==ml::IT_INSIDE;
}

if (level==0 || (LODRange[level]+heightScale<viewPoint.y/*-uOffset.y*/))
if (level==0 || vertDistToTerrain>LODRange[level])
{
addPatchToQueue(level, bx, bz);
return;
Expand Down Expand Up @@ -440,6 +440,9 @@ void CDLODTerrain::drawTerrain()
instData = patchDataMem;
}

vertDistToTerrain = std::max(viewPoint.y-maxY, minY-viewPoint.y);
vertDistToTerrain = std::max(vertDistToTerrain, 0.0f);

{
PROFILER_CPU_BLOCK("Select");
cpuSelectTimer.start();
Expand All @@ -465,10 +468,8 @@ void CDLODTerrain::drawTerrain()
if (patchCount)
{
PROFILER_CPU_BLOCK("Render");
glPushAttrib(GL_ALL_ATTRIB_BITS);

float vertDistToTerrain = abs(viewPoint.y/*-uOffset.y*/-heightScale/2.0f);
viewData.uLODViewK = vi_set(-viewPoint.x, vertDistToTerrain>heightScale/2.0?vertDistToTerrain-heightScale/2.0f:0.0f, -viewPoint.z, 0.0f);
glPushAttrib(GL_ALL_ATTRIB_BITS);

glBindBufferRange(GL_UNIFORM_BUFFER, UNI_TERRAIN_BINDING, ubo, uniTerrainOffset, sizeof(TerrainData));
glBindBufferRange(GL_UNIFORM_BUFFER, UNI_VIEW_BINDING, ubo, uniViewOffset, sizeof(ViewData));
Expand All @@ -488,6 +489,8 @@ void CDLODTerrain::drawTerrain()

glUseProgram(useInstancing?prgInstancedTerrain:prgTerrain);

viewData.uLODViewK = vi_set(-viewPoint.x, vertDistToTerrain, -viewPoint.z, 0.0f);

glBindBuffer(GL_UNIFORM_BUFFER, ubo);
glBufferSubData(GL_UNIFORM_BUFFER, uniViewOffset, sizeof(ViewData), &viewData);

Expand Down Expand Up @@ -525,6 +528,7 @@ void CDLODTerrain::drawTerrain()
void CDLODTerrain::setHeightmap(uint16_t* data, size_t width, size_t height)
{
float pixelsPerChunk;
float heightScale;

cellSize = 4.0f;
patchDim = 8;
Expand Down
45 changes: 19 additions & 26 deletions Samples/exest/CDLODTerrain.h
Expand Up @@ -22,60 +22,53 @@ class CDLODTerrain
float minX, maxX;
float minY, maxY;
float minZ, maxZ;
float heightScale;//should be midHeight
float morphZoneRatio;//should be local

bool useInstancing;
bool drawWireframe;


GLuint prgInstancedTerrain, prgTerrain;
GLuint geomVBO, instVBO, ibo, ubo;
GLuint mHeightmapTex;
GLuint mColorRampTex;
GLuint vaoInst, vao;

GLsizei uniTerrainOffset, uniViewOffset, uniGradientOffset, uniPatchOffset;
float LODRange [MAX_LOD_COUNT];
float patchScale[MAX_LOD_COUNT];

struct ViewData
{
ml::mat4x4 uMVP;
vec4 uLODViewK;
} viewData;

glm::vec4 viewDir;
glm::vec3 viewPoint;
ml::mat4x4 sseVP;
float vertDistToTerrain;

PatchData* instData;
PatchData* patchDataMem;
size_t patchCount;
size_t maxPatchCount;
GLsizei idxCount;

glm::vec4 viewDir;
glm::vec3 viewPoint;

ml::mat4x4 sseVP;
bool useInstancing;
bool drawWireframe;

float LODRange [MAX_LOD_COUNT];
float patchScale[MAX_LOD_COUNT];
GLuint prgInstancedTerrain, prgTerrain;
GLuint geomVBO, instVBO, ibo, ubo;
GLuint mHeightmapTex;
GLuint mColorRampTex;
GLuint vaoInst, vao;
GLsizei uniTerrainOffset, uniViewOffset, uniGradientOffset, uniPatchOffset;

void generateGeometry();
void generateBBoxData(uint16_t* data);

void setHeightmap(uint16_t* data, size_t width, size_t height);
void setSelectMatrix(glm::mat4& mat);
void setMVPMatrix(glm::mat4& mat);

void calculateLODParams(vec4* morphParams);
void setHeightmap(uint16_t* data, size_t width, size_t height);

void addPatchToQueue(size_t level, float bx, float bz);
void selectQuadsForDrawing(size_t level, float bx, float bz, float patchSize, bool skipFrustumTest=false);

void initialize();
void cleanup();
void reset();

void setSelectMatrix(glm::mat4& mat);
void setMVPMatrix(glm::mat4& mat);
void drawTerrain();

void reset();

CPUTimer cpuTimer;
CPUTimer cpuSelectTimer;
CPUTimer cpuDrawTimer;
Expand Down

0 comments on commit 4bf49ea

Please sign in to comment.