summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp')
-rw-r--r--3rdparty/bgfx/examples/14-shadowvolumes/shadowvolumes.cpp85
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;