mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2025-02-16 11:50:19 -05:00
Fixed 10-font example.
This commit is contained in:
parent
b09059c421
commit
e39d280a31
5 changed files with 28 additions and 287 deletions
|
@ -1,228 +0,0 @@
|
|||
/*
|
||||
* Copyright 2013 Dario Manesku. All rights reserved.
|
||||
* License: http://www.opensource.org/licenses/BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <bx/timer.h>
|
||||
#include "../fpumath.h"
|
||||
#include "camera.h"
|
||||
|
||||
struct Camera
|
||||
{
|
||||
struct MouseCoords
|
||||
{
|
||||
int32_t m_mx;
|
||||
int32_t m_my;
|
||||
};
|
||||
|
||||
Camera()
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
m_mouseNow.m_mx = 0;
|
||||
m_mouseNow.m_my = 0;
|
||||
m_mouseLast.m_mx = 0;
|
||||
m_mouseLast.m_my = 0;
|
||||
m_eye[0] = 0.0f;
|
||||
m_eye[1] = 0.0f;
|
||||
m_eye[2] = -35.0f;
|
||||
m_at[0] = 0.0f;
|
||||
m_at[1] = 0.0f;
|
||||
m_at[2] = -1.0f;
|
||||
m_up[0] = 0.0f;
|
||||
m_up[1] = 1.0f;
|
||||
m_up[2] = 0.0f;
|
||||
m_horizontalAngle = 0.01f;
|
||||
m_verticalAngle = 0.0f;
|
||||
m_mouseSpeed = 0.0020f;
|
||||
m_moveSpeed = 30.0f;
|
||||
m_keys = 0;
|
||||
m_mouseDown = false;
|
||||
}
|
||||
|
||||
void setMouseState(uint32_t _mx, uint32_t _my, bool _down, bool _move)
|
||||
{
|
||||
if (_down)
|
||||
{
|
||||
m_mouseDown = true;
|
||||
m_mouseLast.m_mx = _mx;
|
||||
m_mouseLast.m_my = _my;
|
||||
m_mouseNow.m_mx = _mx;
|
||||
m_mouseNow.m_my = _my;
|
||||
}
|
||||
|
||||
if (!_down && !_move)
|
||||
{
|
||||
m_mouseDown = false;
|
||||
}
|
||||
|
||||
if (m_mouseDown && _move)
|
||||
{
|
||||
m_mouseNow.m_mx = _mx;
|
||||
m_mouseNow.m_my = _my;
|
||||
}
|
||||
}
|
||||
|
||||
void setKeyState(uint8_t _key, bool _down)
|
||||
{
|
||||
m_keys &= ~_key;
|
||||
m_keys |= _down ? _key : 0;
|
||||
}
|
||||
|
||||
void update(float _deltaTime)
|
||||
{
|
||||
if (m_mouseDown)
|
||||
{
|
||||
int32_t deltaX = m_mouseNow.m_mx - m_mouseLast.m_mx;
|
||||
int32_t deltaY = m_mouseNow.m_my - m_mouseLast.m_my;
|
||||
|
||||
m_horizontalAngle += m_mouseSpeed * float(deltaX);
|
||||
m_verticalAngle -= m_mouseSpeed * float(deltaY);
|
||||
|
||||
m_mouseLast.m_mx = m_mouseNow.m_mx;
|
||||
m_mouseLast.m_my = m_mouseNow.m_my;
|
||||
}
|
||||
|
||||
float direction[3] =
|
||||
{
|
||||
cosf(m_verticalAngle) * sinf(m_horizontalAngle),
|
||||
sinf(m_verticalAngle),
|
||||
cosf(m_verticalAngle) * cosf(m_horizontalAngle),
|
||||
};
|
||||
|
||||
float right[3] =
|
||||
{
|
||||
sinf(m_horizontalAngle - float(M_PI)/2.0f),
|
||||
0,
|
||||
cosf(m_horizontalAngle - float(M_PI)/2.0f),
|
||||
};
|
||||
|
||||
if (m_keys & CAMERA_KEY_UP)
|
||||
{
|
||||
// m_eye += direction * _deltaTime * m_moveSpeed
|
||||
float tmpRhs[3];
|
||||
float tmpPos[3];
|
||||
memcpy(tmpPos, m_eye, sizeof(float)*3);
|
||||
vec3Mul(tmpRhs, direction, _deltaTime * m_moveSpeed);
|
||||
vec3Add(m_eye, tmpPos, tmpRhs);
|
||||
setKeyState(CAMERA_KEY_UP, false);
|
||||
}
|
||||
|
||||
if (m_keys & CAMERA_KEY_DOWN)
|
||||
{
|
||||
// m_eye -= direction * _deltaTime * m_moveSpeed
|
||||
float tmpRhs[3];
|
||||
float tmpPos[3];
|
||||
memcpy(tmpPos, m_eye, sizeof(float)*3);
|
||||
vec3Mul(tmpRhs, direction, _deltaTime * m_moveSpeed);
|
||||
vec3Sub(m_eye, tmpPos, tmpRhs);
|
||||
setKeyState(CAMERA_KEY_DOWN, false);
|
||||
}
|
||||
|
||||
if (m_keys & CAMERA_KEY_LEFT)
|
||||
{
|
||||
// m_eye += right * _deltaTime * m_moveSpeed
|
||||
float tmpRhs[3];
|
||||
float tmpPos[3];
|
||||
memcpy(tmpPos, m_eye, sizeof(float)*3);
|
||||
vec3Mul(tmpRhs, right, _deltaTime * m_moveSpeed);
|
||||
vec3Add(m_eye, tmpPos, tmpRhs);
|
||||
setKeyState(CAMERA_KEY_LEFT, false);
|
||||
}
|
||||
|
||||
if (m_keys & CAMERA_KEY_RIGHT)
|
||||
{
|
||||
// m_eye -= right * _deltaTime * m_moveSpeed
|
||||
float tmpRhs[3];
|
||||
float tmpPos[3];
|
||||
memcpy(tmpPos, m_eye, sizeof(float)*3);
|
||||
vec3Mul(tmpRhs, right, _deltaTime * m_moveSpeed);
|
||||
vec3Sub(m_eye, tmpPos, tmpRhs);
|
||||
setKeyState(CAMERA_KEY_RIGHT, false);
|
||||
}
|
||||
|
||||
vec3Add(m_at, m_eye, direction);
|
||||
vec3Cross(m_up, right, direction);
|
||||
}
|
||||
|
||||
void getViewMtx(float* _viewMtx)
|
||||
{
|
||||
mtxLookAt(_viewMtx, m_eye, m_at, m_up);
|
||||
}
|
||||
|
||||
void setPosition(float* _pos)
|
||||
{
|
||||
memcpy(m_eye, _pos, sizeof(float)*3);
|
||||
}
|
||||
|
||||
void setVerticalAngle(float _verticalAngle)
|
||||
{
|
||||
m_verticalAngle = _verticalAngle;
|
||||
}
|
||||
|
||||
void setHorizontalAngle(float _horizontalAngle)
|
||||
{
|
||||
m_horizontalAngle = _horizontalAngle;
|
||||
}
|
||||
|
||||
MouseCoords m_mouseNow, m_mouseLast;
|
||||
float m_eye[3];
|
||||
float m_at[3];
|
||||
float m_up[3];
|
||||
float m_horizontalAngle;
|
||||
float m_verticalAngle;
|
||||
float m_mouseSpeed;
|
||||
float m_moveSpeed;
|
||||
uint8_t m_keys;
|
||||
bool m_mouseDown;
|
||||
};
|
||||
|
||||
static Camera s_camera;
|
||||
|
||||
void cameraSetPosition(float* _pos)
|
||||
{
|
||||
s_camera.setPosition(_pos);
|
||||
}
|
||||
|
||||
void cameraSetHorizontalAngle(float _horizontalAngle)
|
||||
{
|
||||
s_camera.setHorizontalAngle(_horizontalAngle);
|
||||
}
|
||||
|
||||
void cameraSetVerticalAngle(float _verticalAngle)
|
||||
{
|
||||
s_camera.setVerticalAngle(_verticalAngle);
|
||||
}
|
||||
|
||||
void cameraSetMouseState(uint32_t _mx, uint32_t _my, bool _down, bool _move)
|
||||
{
|
||||
s_camera.setMouseState(_mx, _my, _down, _move);
|
||||
}
|
||||
|
||||
void cameraSetKeyState(uint8_t _key, bool _down)
|
||||
{
|
||||
s_camera.setKeyState(_key, _down);
|
||||
}
|
||||
|
||||
void cameraGetViewMtx(float* _viewMtx)
|
||||
{
|
||||
s_camera.getViewMtx(_viewMtx);
|
||||
}
|
||||
|
||||
void cameraGetPosition(float* _pos)
|
||||
{
|
||||
memcpy(_pos, s_camera.m_eye, 3*sizeof(float));
|
||||
}
|
||||
|
||||
void cameraGetAt(float* _at)
|
||||
{
|
||||
memcpy(_at, s_camera.m_at, 3*sizeof(float));
|
||||
}
|
||||
|
||||
void cameraUpdate(float _deltaTime)
|
||||
{
|
||||
s_camera.update(_deltaTime);
|
||||
}
|
|
@ -1,36 +0,0 @@
|
|||
/*
|
||||
* Copyright 2013 Dario Manesku. All rights reserved.
|
||||
* License: http://www.opensource.org/licenses/BSD-2-Clause
|
||||
*/
|
||||
|
||||
#define CAMERA_KEY_UP UINT8_C(0x1)
|
||||
#define CAMERA_KEY_DOWN UINT8_C(0x2)
|
||||
#define CAMERA_KEY_LEFT UINT8_C(0x4)
|
||||
#define CAMERA_KEY_RIGHT UINT8_C(0x8)
|
||||
|
||||
///
|
||||
void cameraSetPosition(float* _pos);
|
||||
|
||||
///
|
||||
void cameraSetHorizontalAngle(float _horizontalAngle);
|
||||
|
||||
///
|
||||
void cameraSetVerticalAngle(float _verticalAngle);
|
||||
|
||||
///
|
||||
void cameraSetMouseState(uint32_t _mx, uint32_t _my, bool _down, bool _move);
|
||||
|
||||
///
|
||||
void cameraSetKeyState(uint8_t _key, bool _down);
|
||||
|
||||
///
|
||||
void cameraGetViewMtx(float* _viewMtx);
|
||||
|
||||
///
|
||||
void cameraGetPosition(float* _pos);
|
||||
|
||||
///
|
||||
void cameraGetAt(float* _at);
|
||||
|
||||
///
|
||||
void cameraUpdate(float _deltaTime = 0.0f);
|
|
@ -587,31 +587,28 @@ TextBufferManager::TextBufferManager(FontManager* _fontManager)
|
|||
break;
|
||||
}
|
||||
|
||||
bgfx::ShaderHandle vsh;
|
||||
bgfx::ShaderHandle fsh;
|
||||
m_basicProgram = bgfx::createProgram(
|
||||
bgfx::createShader(vs_font_basic)
|
||||
, bgfx::createShader(fs_font_basic)
|
||||
, true
|
||||
);
|
||||
|
||||
vsh = bgfx::createShader(vs_font_basic);
|
||||
fsh = bgfx::createShader(fs_font_basic);
|
||||
m_basicProgram = bgfx::createProgram(vsh, fsh);
|
||||
bgfx::destroyShader(vsh);
|
||||
bgfx::destroyShader(fsh);
|
||||
m_distanceProgram = bgfx::createProgram(
|
||||
bgfx::createShader(vs_font_distance_field)
|
||||
, bgfx::createShader(fs_font_distance_field)
|
||||
, true
|
||||
);
|
||||
|
||||
vsh = bgfx::createShader(vs_font_distance_field);
|
||||
fsh = bgfx::createShader(fs_font_distance_field);
|
||||
m_distanceProgram = bgfx::createProgram(vsh, fsh);
|
||||
bgfx::destroyShader(vsh);
|
||||
bgfx::destroyShader(fsh);
|
||||
|
||||
vsh = bgfx::createShader(vs_font_distance_field_subpixel);
|
||||
fsh = bgfx::createShader(fs_font_distance_field_subpixel);
|
||||
m_distanceSubpixelProgram = bgfx::createProgram(vsh, fsh);
|
||||
bgfx::destroyShader(vsh);
|
||||
bgfx::destroyShader(fsh);
|
||||
m_distanceSubpixelProgram = bgfx::createProgram(
|
||||
bgfx::createShader(vs_font_distance_field_subpixel)
|
||||
, bgfx::createShader(fs_font_distance_field_subpixel)
|
||||
, true
|
||||
);
|
||||
|
||||
m_vertexDecl.begin();
|
||||
m_vertexDecl.add(bgfx::Attrib::Position, 2, bgfx::AttribType::Float);
|
||||
m_vertexDecl.add(bgfx::Attrib::Position, 2, bgfx::AttribType::Float);
|
||||
m_vertexDecl.add(bgfx::Attrib::TexCoord0, 4, bgfx::AttribType::Int16, true);
|
||||
m_vertexDecl.add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true);
|
||||
m_vertexDecl.add(bgfx::Attrib::Color0, 4, bgfx::AttribType::Uint8, true);
|
||||
m_vertexDecl.end();
|
||||
|
||||
u_texColor = bgfx::createUniform("u_texColor", bgfx::UniformType::Uniform1iv);
|
||||
|
@ -693,7 +690,7 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, uint8_t _id,
|
|||
|
||||
BufferCache& bc = m_textBuffers[_handle.idx];
|
||||
|
||||
uint32_t indexSize = bc.textBuffer->getIndexCount() * bc.textBuffer->getIndexSize();
|
||||
uint32_t indexSize = bc.textBuffer->getIndexCount() * bc.textBuffer->getIndexSize();
|
||||
uint32_t vertexSize = bc.textBuffer->getVertexCount() * bc.textBuffer->getVertexSize();
|
||||
|
||||
if (0 == indexSize || 0 == vertexSize)
|
||||
|
@ -759,7 +756,7 @@ void TextBufferManager::submitTextBuffer(TextBufferHandle _handle, uint8_t _id,
|
|||
vbh.idx = bc.vertexBufferHandleIdx;
|
||||
}
|
||||
|
||||
bgfx::setVertexBuffer(vbh, bc.textBuffer->getVertexCount() );
|
||||
bgfx::setVertexBuffer(vbh, 0, bc.textBuffer->getVertexCount() );
|
||||
bgfx::setIndexBuffer(ibh, bc.textBuffer->getIndexCount() );
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -1257,7 +1257,10 @@ namespace bgfx
|
|||
void setIndexBuffer(const TransientIndexBuffer* _tib, uint32_t _numIndices = UINT32_MAX);
|
||||
|
||||
/// Set vertex buffer for draw primitive.
|
||||
void setVertexBuffer(VertexBufferHandle _handle, uint32_t _startVertex = 0, uint32_t _numVertices = UINT32_MAX);
|
||||
void setVertexBuffer(VertexBufferHandle _handle);
|
||||
|
||||
/// Set vertex buffer for draw primitive.
|
||||
void setVertexBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices);
|
||||
|
||||
/// Set vertex buffer for draw primitive.
|
||||
void setVertexBuffer(DynamicVertexBufferHandle _handle, uint32_t _numVertices = UINT32_MAX);
|
||||
|
|
|
@ -2321,6 +2321,11 @@ namespace bgfx
|
|||
s_ctx->setIndexBuffer(_tib, numIndices);
|
||||
}
|
||||
|
||||
void setVertexBuffer(VertexBufferHandle _handle)
|
||||
{
|
||||
setVertexBuffer(_handle, 0, UINT32_MAX);
|
||||
}
|
||||
|
||||
void setVertexBuffer(VertexBufferHandle _handle, uint32_t _startVertex, uint32_t _numVertices)
|
||||
{
|
||||
BGFX_CHECK_MAIN_THREAD();
|
||||
|
|
Loading…
Reference in a new issue