Bladeren bron

Added 23-vectordisplay shaders and screenshot.

Branimir Karadžić 11 jaren geleden
bovenliggende
commit
a4b3c2ae36

+ 6 - 0
README.md

@@ -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


+ 32 - 31
examples/23-vectordisplay/vectordisplay.cpp

@@ -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) ) );
-	m_vertexBuffersSize[m_currentDrawStep] = m_points.size();
+	bgfx::updateDynamicVertexBuffer(m_vertexBuffers[m_currentDrawStep]
+		, 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 a = ( (float)M_PI - pa2a) / 2.0f;
+					float shorten = t * sinf(pa2a / 2.0f) / cosf(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),
-	         _y - spokeradius * cos(_angle + (float)M_PI / 4.0f),
-	         _x - spokeradius * sin(_angle + (float)M_PI / 4.0f),
-	         _y + spokeradius * cos(_angle + (float)M_PI / 4.0f) );
-	drawLine(_x + spokeradius * sin(_angle + (float)M_PI / 2.0f),
-	         _y - spokeradius * cos(_angle + (float)M_PI / 2.0f),
-	         _x - spokeradius * sin(_angle + (float)M_PI / 2.0f),
-	         _y + spokeradius * cos(_angle + (float)M_PI / 2.0f) );
-	drawLine(_x + spokeradius * sin(_angle + 3.0f * (float)M_PI / 4.0f),
-	         _y - spokeradius * cos(_angle + 3.0f * (float)M_PI / 4.0f),
-	         _x - spokeradius * sin(_angle + 3.0f * (float)M_PI / 4.0f),
-	         _y + spokeradius * cos(_angle + 3.0f * (float)M_PI / 4.0f) );
+	drawLine(_x + spokeradius * sin(_angle + bx::pi / 4.0f),
+	         _y - spokeradius * cos(_angle + bx::pi / 4.0f),
+	         _x - spokeradius * sin(_angle + bx::pi / 4.0f),
+	         _y + spokeradius * cos(_angle + bx::pi / 4.0f) );
+	drawLine(_x + spokeradius * sin(_angle + bx::pi / 2.0f),
+	         _y - spokeradius * cos(_angle + bx::pi / 2.0f),
+	         _x - spokeradius * sin(_angle + bx::pi / 2.0f),
+	         _y + spokeradius * cos(_angle + bx::pi / 2.0f) );
+	drawLine(_x + spokeradius * sin(_angle + 3.0f * bx::pi / 4.0f),
+	         _y - spokeradius * cos(_angle + 3.0f * bx::pi / 4.0f),
+	         _x - spokeradius * sin(_angle + 3.0f * bx::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),
-		       _y - _radius * cos(_angle + edgeangle + (float)M_PI / 4.0f - angadjust) );
+		drawTo(_x + _radius * sin(_angle + edgeangle + bx::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++)
 		{
 		{

+ 1 - 0
examples/makefile

@@ -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


BIN
examples/runtime/shaders/dx11/fs_vectordisplay_blur.bin


BIN
examples/runtime/shaders/dx11/fs_vectordisplay_fb.bin


BIN
examples/runtime/shaders/dx11/vs_vectordisplay_fb.bin


BIN
examples/runtime/shaders/dx9/fs_vectordisplay_blit.bin


BIN
examples/runtime/shaders/dx9/fs_vectordisplay_blur.bin


BIN
examples/runtime/shaders/dx9/fs_vectordisplay_fb.bin


BIN
examples/runtime/shaders/dx9/vs_vectordisplay_fb.bin


BIN
examples/runtime/shaders/gles/fs_vectordisplay_blit.bin


BIN
examples/runtime/shaders/gles/fs_vectordisplay_blur.bin


BIN
examples/runtime/shaders/gles/fs_vectordisplay_fb.bin


BIN
examples/runtime/shaders/gles/vs_vectordisplay_fb.bin


BIN
examples/runtime/shaders/glsl/fs_vectordisplay_blit.bin


BIN
examples/runtime/shaders/glsl/fs_vectordisplay_blur.bin


BIN
examples/runtime/shaders/glsl/fs_vectordisplay_fb.bin


BIN
examples/runtime/shaders/glsl/vs_vectordisplay_fb.bin


+ 3 - 1
scripts/genie.lua

@@ -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