diff options
Diffstat (limited to '3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp')
-rw-r--r-- | 3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp | 85 |
1 files changed, 41 insertions, 44 deletions
diff --git a/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp b/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp index 8b61d60c671..5149e79e33b 100644 --- a/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp +++ b/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp @@ -3,9 +3,6 @@ * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ -#include <stdio.h> -#include <string.h> - #include <string> #include <vector> #include <map> @@ -664,7 +661,7 @@ struct HalfEdges m_offsets = (uint32_t*)malloc(numRows * sizeof(uint32_t) ); HalfEdge* he = m_data; - for (uint32_t ii = 0; ii < numRows; ++ii) + for (uint16_t ii = 0; ii < numRows; ++ii) { m_offsets[ii] = uint32_t(he - m_data); @@ -756,15 +753,15 @@ uint16_t weldVertices(WeldedVertex* _output, const bgfx::VertexDecl& _decl, cons const uint32_t hashMask = hashSize-1; const float epsilonSq = _epsilon*_epsilon; - uint32_t numVertices = 0; + uint16_t numVertices = 0; const uint32_t size = sizeof(uint16_t)*(hashSize + _num); uint16_t* hashTable = (uint16_t*)alloca(size); - memset(hashTable, 0xff, size); + bx::memSet(hashTable, 0xff, size); uint16_t* next = hashTable + hashSize; - for (uint32_t ii = 0; ii < _num; ++ii) + for (uint16_t ii = 0; ii < _num; ++ii) { float pos[4]; vertexUnpack(pos, bgfx::Attrib::Position, _decl, _data, ii); @@ -888,7 +885,7 @@ struct Group face.m_i[0] = i0; face.m_i[1] = i1; face.m_i[2] = i2; - memcpy(face.m_plane, plane, 4*sizeof(float) ); + bx::memCopy(face.m_plane, plane, 4*sizeof(float) ); m_faces.push_back(face); //Use unique indices for EdgeMap. @@ -916,14 +913,14 @@ struct Group if (iter != edgeMap.end() ) { EdgeAndPlane& ep = iter->second; - memcpy(ep.m_plane[ep.m_faceIndex].m_plane, plane, 4*sizeof(float) ); + bx::memCopy(ep.m_plane[ep.m_faceIndex].m_plane, plane, 4*sizeof(float) ); ep.m_faceReverseOrder[ep.m_faceIndex] = true; } else { std::pair<EdgeMap::iterator, bool> result = edgeMap.insert(std::make_pair(key, EdgeAndPlane(ui0, ui1) ) ); EdgeAndPlane& ep = result.first->second; - memcpy(ep.m_plane[ep.m_faceIndex].m_plane, plane, 4*sizeof(float) ); + bx::memCopy(ep.m_plane[ep.m_faceIndex].m_plane, plane, 4*sizeof(float) ); ep.m_faceReverseOrder[ep.m_faceIndex] = false; ep.m_faceIndex++; } @@ -938,8 +935,8 @@ struct Group Edge* edge = &m_edges[m_numEdges]; Plane* plane = &m_edgePlanes[index]; - memcpy(edge, iter->second.m_faceReverseOrder, sizeof(Edge) ); - memcpy(plane, iter->second.m_plane, 2 * sizeof(Plane) ); + bx::memCopy(edge, iter->second.m_faceReverseOrder, sizeof(Edge) ); + bx::memCopy(plane, iter->second.m_plane, 2 * sizeof(Plane) ); m_numEdges++; index += 2; @@ -991,7 +988,7 @@ namespace bgfx struct Mesh { - void load(const void* _vertices, uint32_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices) + void load(const void* _vertices, uint16_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices) { Group group; const bgfx::Memory* mem; @@ -1002,7 +999,7 @@ struct Mesh size = _numVertices*_decl.getStride(); group.m_vertices = (uint8_t*)malloc(size); - memcpy(group.m_vertices, _vertices, size); + bx::memCopy(group.m_vertices, _vertices, size); mem = bgfx::makeRef(group.m_vertices, size); group.m_vbh = bgfx::createVertexBuffer(mem, _decl); @@ -1012,7 +1009,7 @@ struct Mesh size = _numIndices*2; group.m_indices = (uint16_t*)malloc(size); - memcpy(group.m_indices, _indices, size); + bx::memCopy(group.m_indices, _indices, size); mem = bgfx::makeRef(group.m_indices, size); group.m_ibh = bgfx::createIndexBuffer(mem); @@ -1140,7 +1137,7 @@ struct Model m_texture.idx = bgfx::invalidHandle; } - void load(const void* _vertices, uint32_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices) + void load(const void* _vertices, uint16_t _numVertices, const bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices) { m_mesh.load(_vertices, _numVertices, _decl, _indices, _numIndices); } @@ -1204,7 +1201,7 @@ struct Instance void submit(uint8_t _viewId, const RenderState& _renderState) { - memcpy(s_uniforms.m_color, m_color, 3*sizeof(float) ); + bx::memCopy(s_uniforms.m_color, m_color, 3*sizeof(float) ); float mtx[16]; bx::mtxSRT(mtx @@ -1374,7 +1371,7 @@ void shadowVolumeCreate(ShadowVolume& _shadowVolume VertexData(const float* _v3, float _extrude = 0.0f, float _k = 1.0f) { - memcpy(m_v, _v3, 3*sizeof(float) ); + bx::memCopy(m_v, _v3, 3*sizeof(float) ); m_extrude = _extrude; m_k = _k; } @@ -1565,7 +1562,7 @@ void shadowVolumeCreate(ShadowVolume& _shadowVolume for (uint16_t jj = 0; jj < 2; ++jj) { - int16_t kk = res[jj] + res[jj+2]; + int32_t kk = res[jj] + res[jj+2]; if (kk != 0) { float* v0 = (float*)&vertices[edges[ii+jj].m_i0*_stride]; @@ -1577,7 +1574,7 @@ void shadowVolumeCreate(ShadowVolume& _shadowVolume kk = _textureAsStencil ? 1 : kk; uint16_t winding = uint16_t(kk > 0); - for (uint8_t ll = 0, end = abs(kk); ll < end; ++ll) + for (int32_t ll = 0, end = abs(kk); ll < end; ++ll) { indicesSide[sideI++] = indexSide; indicesSide[sideI++] = indexSide + 2 - winding; @@ -1614,7 +1611,7 @@ void shadowVolumeCreate(ShadowVolume& _shadowVolume kk = _textureAsStencil ? 1 : kk; uint16_t winding = uint16_t(kk > 0); - for (uint8_t jj = 0, end = abs(kk); jj < end; ++jj) + for (int32_t jj = 0, end = abs(kk); jj < end; ++jj) { indicesSide[sideI++] = indexSide; indicesSide[sideI++] = indexSide + 2 - winding; @@ -1738,7 +1735,7 @@ void createNearClipVolume(float* __restrict _outPlanes24f // -1.0f - behind near plane float lightSide = float( (d > delta) - (d < -delta) ); - float t = tanf(bx::toRad(_fovy)*0.5f) * _near; + float t = bx::ftan(bx::toRad(_fovy)*0.5f) * _near; float b = -t; float r = t * _aspect; float l = -r; @@ -1777,7 +1774,7 @@ void createNearClipVolume(float* __restrict _outPlanes24f normal[1] *= lightSide; normal[2] *= lightSide; - float lenInv = 1.0f / sqrtf(bx::vec3Dot(normal, normal) ); + float lenInv = 1.0f / bx::fsqrt(bx::vec3Dot(normal, normal) ); plane[0] = normal[0] * lenInv; plane[1] = normal[1] * lenInv; @@ -1800,7 +1797,7 @@ void createNearClipVolume(float* __restrict _outPlanes24f bx::vec3MulMtx(tmp, lightPlaneNormal, mtxViewInv); bx::vec3Sub(lightPlaneNormal, tmp, _lightPos); - float lenInv = 1.0f / sqrtf(bx::vec3Dot(lightPlaneNormal, lightPlaneNormal) ); + float lenInv = 1.0f / bx::fsqrt(bx::vec3Dot(lightPlaneNormal, lightPlaneNormal) ); lightPlane[0] = lightPlaneNormal[0] * lenInv; lightPlane[1] = lightPlaneNormal[1] * lenInv; @@ -1881,8 +1878,8 @@ int _main_(int _argc, char** _argv) bgfx::TextureHandle fbtextures[] = { - bgfx::createTexture2D(viewState.m_width, viewState.m_height, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_RT), - bgfx::createTexture2D(viewState.m_width, viewState.m_height, false, 1, bgfx::TextureFormat::D16, BGFX_TEXTURE_RT_WRITE_ONLY), + bgfx::createTexture2D(uint16_t(viewState.m_width), uint16_t(viewState.m_height), false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP | BGFX_TEXTURE_RT), + bgfx::createTexture2D(uint16_t(viewState.m_width), uint16_t(viewState.m_height), false, 1, bgfx::TextureFormat::D16, BGFX_TEXTURE_RT_WRITE_ONLY), }; s_stencilFb = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true); @@ -2075,8 +2072,8 @@ int _main_(int _argc, char** _argv) bgfx::destroyFrameBuffer(s_stencilFb); - fbtextures[0] = bgfx::createTexture2D(viewState.m_width, viewState.m_height, false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_RT); - fbtextures[1] = bgfx::createTexture2D(viewState.m_width, viewState.m_height, false, 1, bgfx::TextureFormat::D16, BGFX_TEXTURE_RT_WRITE_ONLY); + fbtextures[0] = bgfx::createTexture2D(uint16_t(viewState.m_width), uint16_t(viewState.m_height), false, 1, bgfx::TextureFormat::BGRA8, BGFX_TEXTURE_U_CLAMP|BGFX_TEXTURE_V_CLAMP|BGFX_TEXTURE_RT); + fbtextures[1] = bgfx::createTexture2D(uint16_t(viewState.m_width), uint16_t(viewState.m_height), false, 1, bgfx::TextureFormat::D16, BGFX_TEXTURE_RT_WRITE_ONLY); s_stencilFb = bgfx::createFrameBuffer(BX_COUNTOF(fbtextures), fbtextures, true); } @@ -2119,8 +2116,8 @@ int _main_(int _argc, char** _argv) | (mouseState.m_buttons[entry::MouseButton::Right ] ? IMGUI_MBUT_RIGHT : 0) | (mouseState.m_buttons[entry::MouseButton::Middle] ? IMGUI_MBUT_MIDDLE : 0) , mouseState.m_mz - , viewState.m_width - , viewState.m_height + , uint16_t(viewState.m_width) + , uint16_t(viewState.m_height) ); imguiBeginScrollArea("Settings", viewState.m_width - 256 - 10, 10, 256, 700, &scrollAreaRight); @@ -2259,9 +2256,9 @@ int _main_(int _argc, char** _argv) { for (uint8_t ii = 0; ii < settings_numLights; ++ii) { - lightPosRadius[ii][0] = cosf(2.0f*bx::pi/settings_numLights * float(ii) + lightTimeAccumulator * 1.1f + 3.0f) * 20.0f; + lightPosRadius[ii][0] = bx::fcos(2.0f*bx::pi/settings_numLights * float(ii) + lightTimeAccumulator * 1.1f + 3.0f) * 20.0f; lightPosRadius[ii][1] = 20.0f; - lightPosRadius[ii][2] = sinf(2.0f*bx::pi/settings_numLights * float(ii) + lightTimeAccumulator * 1.1f + 3.0f) * 20.0f; + lightPosRadius[ii][2] = bx::fsin(2.0f*bx::pi/settings_numLights * float(ii) + lightTimeAccumulator * 1.1f + 3.0f) * 20.0f; lightPosRadius[ii][3] = 20.0f; } } @@ -2269,9 +2266,9 @@ int _main_(int _argc, char** _argv) { for (uint8_t ii = 0; ii < settings_numLights; ++ii) { - lightPosRadius[ii][0] = cosf(float(ii) * 2.0f/settings_numLights + lightTimeAccumulator * 1.3f + bx::pi) * 40.0f; + lightPosRadius[ii][0] = bx::fcos(float(ii) * 2.0f/settings_numLights + lightTimeAccumulator * 1.3f + bx::pi) * 40.0f; lightPosRadius[ii][1] = 20.0f; - lightPosRadius[ii][2] = sinf(float(ii) * 2.0f/settings_numLights + lightTimeAccumulator * 1.3f + bx::pi) * 40.0f; + lightPosRadius[ii][2] = bx::fsin(float(ii) * 2.0f/settings_numLights + lightTimeAccumulator * 1.3f + bx::pi) * 40.0f; lightPosRadius[ii][3] = 20.0f; } } @@ -2345,9 +2342,9 @@ int _main_(int _argc, char** _argv) inst.m_rotation[0] = 0.0f; inst.m_rotation[1] = 0.0f; inst.m_rotation[2] = 0.0f; - inst.m_pos[0] = sinf(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f; + inst.m_pos[0] = bx::fsin(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f; inst.m_pos[1] = 6.0f; - inst.m_pos[2] = cosf(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f; + inst.m_pos[2] = bx::fcos(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f; inst.m_model = &cubeModel; } @@ -2362,9 +2359,9 @@ int _main_(int _argc, char** _argv) inst.m_rotation[0] = 0.0f; inst.m_rotation[1] = 0.0f; inst.m_rotation[2] = 0.0f; - inst.m_pos[0] = sinf(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f; + inst.m_pos[0] = bx::fsin(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f; inst.m_pos[1] = 22.0f; - inst.m_pos[2] = cosf(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f; + inst.m_pos[2] = bx::fcos(ii * 2.0f + 13.0f + sceneTimeAccumulator * 1.1f) * 13.0f; inst.m_model = &cubeModel; } @@ -2575,9 +2572,9 @@ int _main_(int _argc, char** _argv) { const float* lightPos = lightPosRadius[ii]; - memcpy(s_uniforms.m_lightPosRadius, lightPosRadius[ii], 4*sizeof(float) ); - memcpy(s_uniforms.m_lightRgbInnerR, lightRgbInnerR[ii], 3*sizeof(float) ); - memcpy(s_uniforms.m_color, lightRgbInnerR[ii], 3*sizeof(float) ); + bx::memCopy(s_uniforms.m_lightPosRadius, lightPosRadius[ii], 4*sizeof(float) ); + bx::memCopy(s_uniforms.m_lightRgbInnerR, lightRgbInnerR[ii], 3*sizeof(float) ); + bx::memCopy(s_uniforms.m_color, lightRgbInnerR[ii], 3*sizeof(float) ); if (settings_useStencilTexture) { @@ -2639,7 +2636,7 @@ int _main_(int _argc, char** _argv) ); // Set virtual light pos. - memcpy(s_uniforms.m_virtualLightPos_extrusionDist, transformedLightPos, 3*sizeof(float) ); + bx::memCopy(s_uniforms.m_virtualLightPos_extrusionDist, transformedLightPos, 3*sizeof(float) ); s_uniforms.m_virtualLightPos_extrusionDist[3] = instance.m_svExtrusionDistance; // Compute transform for shadow volume. @@ -2786,7 +2783,7 @@ int _main_(int _argc, char** _argv) const float lightScale[3] = { 1.5f, 1.5f, 1.5f }; for (uint8_t ii = 0; ii < settings_numLights; ++ii) { - memcpy(s_uniforms.m_color, lightRgbInnerR[ii], 3*sizeof(float) ); + bx::memCopy(s_uniforms.m_color, lightRgbInnerR[ii], 3*sizeof(float) ); float lightMtx[16]; mtxBillboard(lightMtx, viewState.m_view, lightPosRadius[ii], lightScale); @@ -2795,7 +2792,7 @@ int _main_(int _argc, char** _argv) } // Setup view rect and transform for all used views. - setViewRectMask(s_viewMask, 0, 0, viewState.m_width, viewState.m_height); + setViewRectMask(s_viewMask, 0, 0, uint16_t(viewState.m_width), uint16_t(viewState.m_height) ); setViewTransformMask(s_viewMask, viewState.m_view, viewState.m_proj); s_viewMask = 0; |