mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-28 10:35:43 -05:00
Added 23-vectordisplay shaders and screenshot.
This commit is contained in:
parent
23c046cd8c
commit
a4b3c2ae36
21 changed files with 42 additions and 32 deletions
|
@ -275,6 +275,12 @@ MRT rendering and deferred shading.
|
||||||
|
|
||||||
Rendering into multiple windows.
|
Rendering into multiple windows.
|
||||||
|
|
||||||
|
### [23-vectordisplay](https://github.com/bkaradzic/bgfx/tree/master/examples/23-vectordisplay)
|
||||||
|
|
||||||
|
Rendering lines as oldschool vectors.
|
||||||
|
|
||||||
|
![example-23-vectordisplay](https://github.com/bkaradzic/bgfx/raw/master/examples/23-vectordisplay/screenshot.png)
|
||||||
|
|
||||||
Dependencies
|
Dependencies
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|
BIN
examples/23-vectordisplay/screenshot.png
Normal file
BIN
examples/23-vectordisplay/screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 126 KiB |
|
@ -14,7 +14,6 @@
|
||||||
|
|
||||||
#include "bgfx_utils.h"
|
#include "bgfx_utils.h"
|
||||||
|
|
||||||
#define _USE_MATH_DEFINES
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <float.h>
|
#include <float.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
@ -163,8 +162,10 @@ void VectorDisplay::endFrame()
|
||||||
|
|
||||||
assert(m_points.size() < MAX_NUMBER_VERTICES);
|
assert(m_points.size() < MAX_NUMBER_VERTICES);
|
||||||
|
|
||||||
bgfx::updateDynamicVertexBuffer(m_vertexBuffers[m_currentDrawStep], bgfx::copy(m_points.data(), m_points.size() * sizeof(point_t) ) );
|
bgfx::updateDynamicVertexBuffer(m_vertexBuffers[m_currentDrawStep]
|
||||||
m_vertexBuffersSize[m_currentDrawStep] = m_points.size();
|
, bgfx::copy(m_points.data(), (uint32_t)m_points.size() * sizeof(point_t) )
|
||||||
|
);
|
||||||
|
m_vertexBuffersSize[m_currentDrawStep] = (uint32_t)m_points.size();
|
||||||
|
|
||||||
//if the index buffer is cleared from the last "submit"-call everything is fine, but if not
|
//if the index buffer is cleared from the last "submit"-call everything is fine, but if not
|
||||||
//we clear it here again just to be sure it's not set... (the same for the Transform)
|
//we clear it here again just to be sure it's not set... (the same for the Transform)
|
||||||
|
@ -342,7 +343,7 @@ void VectorDisplay::endDraw()
|
||||||
}
|
}
|
||||||
|
|
||||||
// from the list of points, build a list of lines
|
// from the list of points, build a list of lines
|
||||||
size_t nlines = m_pendingPoints.size() - 1;
|
uint32_t nlines = (uint32_t)m_pendingPoints.size() - 1;
|
||||||
line_t* lines = (line_t*)alloca(nlines * sizeof(line_t) );
|
line_t* lines = (line_t*)alloca(nlines * sizeof(line_t) );
|
||||||
|
|
||||||
float t = effectiveThickness();
|
float t = effectiveThickness();
|
||||||
|
@ -390,12 +391,12 @@ void VectorDisplay::endDraw()
|
||||||
float a2pa = normalizef(line->a - pline->a);
|
float a2pa = normalizef(line->a - pline->a);
|
||||||
float maxshorten = MIN(line->len, pline->len) / 2.0f;
|
float maxshorten = MIN(line->len, pline->len) / 2.0f;
|
||||||
|
|
||||||
if (MIN(a2pa, pa2a) <= (M_PI / 2 + FLT_EPSILON) )
|
if (bx::fmin(a2pa, pa2a) <= (bx::pi / 2.0f + FLT_EPSILON) )
|
||||||
{
|
{
|
||||||
if (a2pa < pa2a)
|
if (a2pa < pa2a)
|
||||||
{
|
{
|
||||||
float shorten = t * sin(a2pa / 2) / cos(a2pa / 2);
|
float shorten = t * sin(a2pa / 2) / cos(a2pa / 2);
|
||||||
float a = ( (float)M_PI - a2pa) / 2.0f;
|
float a = (bx::pi - a2pa) / 2.0f;
|
||||||
if (shorten > maxshorten)
|
if (shorten > maxshorten)
|
||||||
{
|
{
|
||||||
line->s0 = pline->s1 = maxshorten;
|
line->s0 = pline->s1 = maxshorten;
|
||||||
|
@ -410,12 +411,12 @@ void VectorDisplay::endDraw()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
float shorten = t * sin(pa2a / 2) / cos(pa2a / 2);
|
float shorten = t * sinf(pa2a / 2.0f) / cosf(pa2a / 2.0f);
|
||||||
float a = ( (float)M_PI - pa2a) / 2.0f;
|
float a = (bx::pi - pa2a) / 2.0f;
|
||||||
if (shorten > maxshorten)
|
if (shorten > maxshorten)
|
||||||
{
|
{
|
||||||
line->s0 = pline->s1 = maxshorten;
|
line->s0 = pline->s1 = maxshorten;
|
||||||
line->tl0 = pline->tl1 = maxshorten * sin(a) / cos(a);
|
line->tl0 = pline->tl1 = maxshorten * sinf(a) / cosf(a);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -496,11 +497,11 @@ void VectorDisplay::drawCircle(float _x, float _y, float _radius, float _steps)
|
||||||
float edgeangle = 0.0f;
|
float edgeangle = 0.0f;
|
||||||
float angadjust = 0.0f;
|
float angadjust = 0.0f;
|
||||||
|
|
||||||
float step = (float)M_PI * 2.0f / _steps;
|
float step = bx::pi * 2.0f / _steps;
|
||||||
|
|
||||||
beginDraw(_x + _radius * sin(edgeangle + angadjust),
|
beginDraw(_x + _radius * sin(edgeangle + angadjust),
|
||||||
_y - _radius * cos(edgeangle + angadjust) );
|
_y - _radius * cos(edgeangle + angadjust) );
|
||||||
for (edgeangle = 0; edgeangle < 2 * M_PI - 0.001; edgeangle += step)
|
for (edgeangle = 0; edgeangle < 2.0f * bx::pi - 0.001; edgeangle += step)
|
||||||
{
|
{
|
||||||
drawTo(_x + _radius * sin(edgeangle + step - angadjust),
|
drawTo(_x + _radius * sin(edgeangle + step - angadjust),
|
||||||
_y - _radius * cos(edgeangle + step - angadjust) );
|
_y - _radius * cos(edgeangle + step - angadjust) );
|
||||||
|
@ -517,28 +518,28 @@ void VectorDisplay::drawWheel(float _angle, float _x, float _y, float _radius)
|
||||||
_y - spokeradius * cos(_angle),
|
_y - spokeradius * cos(_angle),
|
||||||
_x - spokeradius * sin(_angle),
|
_x - spokeradius * sin(_angle),
|
||||||
_y + spokeradius * cos(_angle) );
|
_y + spokeradius * cos(_angle) );
|
||||||
drawLine(_x + spokeradius * sin(_angle + (float)M_PI / 4.0f),
|
drawLine(_x + spokeradius * sin(_angle + bx::pi / 4.0f),
|
||||||
_y - spokeradius * cos(_angle + (float)M_PI / 4.0f),
|
_y - spokeradius * cos(_angle + bx::pi / 4.0f),
|
||||||
_x - spokeradius * sin(_angle + (float)M_PI / 4.0f),
|
_x - spokeradius * sin(_angle + bx::pi / 4.0f),
|
||||||
_y + spokeradius * cos(_angle + (float)M_PI / 4.0f) );
|
_y + spokeradius * cos(_angle + bx::pi / 4.0f) );
|
||||||
drawLine(_x + spokeradius * sin(_angle + (float)M_PI / 2.0f),
|
drawLine(_x + spokeradius * sin(_angle + bx::pi / 2.0f),
|
||||||
_y - spokeradius * cos(_angle + (float)M_PI / 2.0f),
|
_y - spokeradius * cos(_angle + bx::pi / 2.0f),
|
||||||
_x - spokeradius * sin(_angle + (float)M_PI / 2.0f),
|
_x - spokeradius * sin(_angle + bx::pi / 2.0f),
|
||||||
_y + spokeradius * cos(_angle + (float)M_PI / 2.0f) );
|
_y + spokeradius * cos(_angle + bx::pi / 2.0f) );
|
||||||
drawLine(_x + spokeradius * sin(_angle + 3.0f * (float)M_PI / 4.0f),
|
drawLine(_x + spokeradius * sin(_angle + 3.0f * bx::pi / 4.0f),
|
||||||
_y - spokeradius * cos(_angle + 3.0f * (float)M_PI / 4.0f),
|
_y - spokeradius * cos(_angle + 3.0f * bx::pi / 4.0f),
|
||||||
_x - spokeradius * sin(_angle + 3.0f * (float)M_PI / 4.0f),
|
_x - spokeradius * sin(_angle + 3.0f * bx::pi / 4.0f),
|
||||||
_y + spokeradius * cos(_angle + 3.0f * (float)M_PI / 4.0f) );
|
_y + spokeradius * cos(_angle + 3.0f * bx::pi / 4.0f) );
|
||||||
|
|
||||||
float edgeangle = 0.0f;
|
float edgeangle = 0.0f;
|
||||||
float angadjust = 0.0f;
|
float angadjust = 0.0f;
|
||||||
|
|
||||||
beginDraw(_x + _radius * sin(_angle + edgeangle + angadjust),
|
beginDraw(_x + _radius * sin(_angle + edgeangle + angadjust),
|
||||||
_y - _radius * cos(_angle + edgeangle + angadjust) );
|
_y - _radius * cos(_angle + edgeangle + angadjust) );
|
||||||
for (edgeangle = 0; edgeangle < 2.0f * (float)M_PI - 0.001f; edgeangle += (float)M_PI / 4.0f)
|
for (edgeangle = 0; edgeangle < 2.0f * bx::pi - 0.001f; edgeangle += bx::pi / 4.0f)
|
||||||
{
|
{
|
||||||
drawTo(_x + _radius * sin(_angle + edgeangle + (float)M_PI / 4.0f - angadjust),
|
drawTo(_x + _radius * sin(_angle + edgeangle + bx::pi / 4.0f - angadjust),
|
||||||
_y - _radius * cos(_angle + edgeangle + (float)M_PI / 4.0f - angadjust) );
|
_y - _radius * cos(_angle + edgeangle + bx::pi / 4.0f - angadjust) );
|
||||||
}
|
}
|
||||||
|
|
||||||
endDraw();
|
endDraw();
|
||||||
|
@ -616,14 +617,14 @@ void VectorDisplay::appendTexpoint(float _x, float _y, float _u, float _v)
|
||||||
|
|
||||||
float VectorDisplay::normalizef(float _a)
|
float VectorDisplay::normalizef(float _a)
|
||||||
{
|
{
|
||||||
while (_a > 2.0f * M_PI + FLT_EPSILON)
|
while (_a > 2.0f * bx::pi + FLT_EPSILON)
|
||||||
{
|
{
|
||||||
_a -= 2.0f * (float)M_PI;
|
_a -= 2.0f * bx::pi;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (_a < 0.0f - FLT_EPSILON)
|
while (_a < 0.0f - FLT_EPSILON)
|
||||||
{
|
{
|
||||||
_a += 2.0f * (float)M_PI;
|
_a += 2.0f * bx::pi;
|
||||||
}
|
}
|
||||||
|
|
||||||
return _a;
|
return _a;
|
||||||
|
@ -640,7 +641,7 @@ void VectorDisplay::drawFan(float _cx, float _cy, float _pa, float _a, float _t,
|
||||||
if (a2pa < pa2a)
|
if (a2pa < pa2a)
|
||||||
{
|
{
|
||||||
_t = -_t;
|
_t = -_t;
|
||||||
nsteps = (int)MAX(1, round(a2pa / (M_PI / 8) ) );
|
nsteps = (int)bx::fmax(1, bx::fround(a2pa / (bx::pi / 8.0f) ) );
|
||||||
angles = (float*)alloca(sizeof(float) * (nsteps + 1) );
|
angles = (float*)alloca(sizeof(float) * (nsteps + 1) );
|
||||||
for (i = 0; i <= nsteps; i++)
|
for (i = 0; i <= nsteps; i++)
|
||||||
{
|
{
|
||||||
|
@ -649,7 +650,7 @@ void VectorDisplay::drawFan(float _cx, float _cy, float _pa, float _a, float _t,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nsteps = (int)MAX(1, round(pa2a / (M_PI / 8) ) );
|
nsteps = (int)bx::fmax(1, bx::fround(pa2a / (bx::pi / 8.0f) ) );
|
||||||
angles = (float*)alloca(sizeof(float) * (nsteps + 1) );
|
angles = (float*)alloca(sizeof(float) * (nsteps + 1) );
|
||||||
for (i = 0; i <= nsteps; i++)
|
for (i = 0; i <= nsteps; i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,6 +25,7 @@ rebuild:
|
||||||
@make -s --no-print-directory rebuild -C 19-oit
|
@make -s --no-print-directory rebuild -C 19-oit
|
||||||
# @make -s --no-print-directory rebuild -C 20-nanovg
|
# @make -s --no-print-directory rebuild -C 20-nanovg
|
||||||
@make -s --no-print-directory rebuild -C 21-deferred
|
@make -s --no-print-directory rebuild -C 21-deferred
|
||||||
|
@make -s --no-print-directory rebuild -C 23-vectordisplay
|
||||||
@make -s --no-print-directory rebuild -C common/font
|
@make -s --no-print-directory rebuild -C common/font
|
||||||
@make -s --no-print-directory rebuild -C common/imgui
|
@make -s --no-print-directory rebuild -C common/imgui
|
||||||
@make -s --no-print-directory rebuild -C common/nanovg
|
@make -s --no-print-directory rebuild -C common/nanovg
|
||||||
|
|
BIN
examples/runtime/shaders/dx11/fs_vectordisplay_blit.bin
Normal file
BIN
examples/runtime/shaders/dx11/fs_vectordisplay_blit.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/dx11/fs_vectordisplay_blur.bin
Normal file
BIN
examples/runtime/shaders/dx11/fs_vectordisplay_blur.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/dx11/fs_vectordisplay_fb.bin
Normal file
BIN
examples/runtime/shaders/dx11/fs_vectordisplay_fb.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/dx11/vs_vectordisplay_fb.bin
Normal file
BIN
examples/runtime/shaders/dx11/vs_vectordisplay_fb.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/dx9/fs_vectordisplay_blit.bin
Normal file
BIN
examples/runtime/shaders/dx9/fs_vectordisplay_blit.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/dx9/fs_vectordisplay_blur.bin
Normal file
BIN
examples/runtime/shaders/dx9/fs_vectordisplay_blur.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/dx9/fs_vectordisplay_fb.bin
Normal file
BIN
examples/runtime/shaders/dx9/fs_vectordisplay_fb.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/dx9/vs_vectordisplay_fb.bin
Normal file
BIN
examples/runtime/shaders/dx9/vs_vectordisplay_fb.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/gles/fs_vectordisplay_blit.bin
Normal file
BIN
examples/runtime/shaders/gles/fs_vectordisplay_blit.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/gles/fs_vectordisplay_blur.bin
Normal file
BIN
examples/runtime/shaders/gles/fs_vectordisplay_blur.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/gles/fs_vectordisplay_fb.bin
Normal file
BIN
examples/runtime/shaders/gles/fs_vectordisplay_fb.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/gles/vs_vectordisplay_fb.bin
Normal file
BIN
examples/runtime/shaders/gles/vs_vectordisplay_fb.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/glsl/fs_vectordisplay_blit.bin
Normal file
BIN
examples/runtime/shaders/glsl/fs_vectordisplay_blit.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/glsl/fs_vectordisplay_blur.bin
Normal file
BIN
examples/runtime/shaders/glsl/fs_vectordisplay_blur.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/glsl/fs_vectordisplay_fb.bin
Normal file
BIN
examples/runtime/shaders/glsl/fs_vectordisplay_fb.bin
Normal file
Binary file not shown.
BIN
examples/runtime/shaders/glsl/vs_vectordisplay_fb.bin
Normal file
BIN
examples/runtime/shaders/glsl/vs_vectordisplay_fb.bin
Normal file
Binary file not shown.
|
@ -49,7 +49,9 @@ defines {
|
||||||
}
|
}
|
||||||
|
|
||||||
dofile (BX_DIR .. "scripts/toolchain.lua")
|
dofile (BX_DIR .. "scripts/toolchain.lua")
|
||||||
toolchain(BGFX_BUILD_DIR, BGFX_THIRD_PARTY_DIR)
|
if not toolchain(BGFX_BUILD_DIR, BGFX_THIRD_PARTY_DIR) then
|
||||||
|
return -- no action specified
|
||||||
|
end
|
||||||
|
|
||||||
function copyLib()
|
function copyLib()
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue