mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-28 18:45:54 -05:00
move shaders to embedded shader system
This commit is contained in:
parent
043a062346
commit
4ca2b3f4af
3 changed files with 81 additions and 75 deletions
|
@ -1,20 +1,9 @@
|
||||||
#
|
#
|
||||||
# Copyright 2013 Roy Jeremie. All rights reserved.
|
# Copyright 2011-2013 Branimir Karadzic. All rights reserved.
|
||||||
# License: http://www.opensource.org/licenses/BSD-2-Clause
|
# License: http://www.opensource.org/licenses/BSD-2-Clause
|
||||||
#
|
#
|
||||||
|
|
||||||
BGFX_DIR=../../..
|
include ../../../premake/shader-embeded.mk
|
||||||
RUNTIME_DIR=$(BGFX_DIR)/examples/runtime
|
|
||||||
BUILD_DIR=../../../.build
|
|
||||||
|
|
||||||
# include $(BGFX_DIR)/premake/shader-embeded.mk
|
|
||||||
include $(BGFX_DIR)/premake/shader.mk
|
|
||||||
|
|
||||||
rebuild:
|
rebuild:
|
||||||
# @make -s --no-print-directory clean all
|
@make -s --no-print-directory clean all
|
||||||
@make -s --no-print-directory TARGET=0 clean all
|
|
||||||
@make -s --no-print-directory TARGET=1 clean all
|
|
||||||
@make -s --no-print-directory TARGET=2 clean all
|
|
||||||
@make -s --no-print-directory TARGET=3 clean all
|
|
||||||
@make -s --no-print-directory TARGET=4 clean all
|
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,14 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stddef.h> /* offsetof */
|
#include <stddef.h> /* offsetof */
|
||||||
|
|
||||||
|
#include "vs_font_basic.bin.h"
|
||||||
|
#include "fs_font_basic.bin.h"
|
||||||
|
#include "vs_font_distance_field.bin.h"
|
||||||
|
#include "fs_font_distance_field.bin.h"
|
||||||
|
#include "vs_font_distance_field_subpixel.bin.h"
|
||||||
|
#include "fs_font_distance_field_subpixel.bin.h"
|
||||||
|
|
||||||
|
|
||||||
#define MAX_TEXT_BUFFER_COUNT 64
|
#define MAX_TEXT_BUFFER_COUNT 64
|
||||||
#define MAX_BUFFERED_CHARACTERS 8192
|
#define MAX_BUFFERED_CHARACTERS 8192
|
||||||
|
|
||||||
|
@ -479,6 +487,73 @@ void TextBuffer::verticalCenterLastLine(float _dy, float _top, float _bottom)
|
||||||
TextBufferManager::TextBufferManager(FontManager* _fontManager):m_fontManager(_fontManager), m_textBufferHandles(MAX_TEXT_BUFFER_COUNT)
|
TextBufferManager::TextBufferManager(FontManager* _fontManager):m_fontManager(_fontManager), m_textBufferHandles(MAX_TEXT_BUFFER_COUNT)
|
||||||
{
|
{
|
||||||
m_textBuffers = new BufferCache[MAX_TEXT_BUFFER_COUNT];
|
m_textBuffers = new BufferCache[MAX_TEXT_BUFFER_COUNT];
|
||||||
|
|
||||||
|
const bgfx::Memory* vs_font_basic;
|
||||||
|
const bgfx::Memory* fs_font_basic;
|
||||||
|
const bgfx::Memory* vs_font_distance_field;
|
||||||
|
const bgfx::Memory* fs_font_distance_field;
|
||||||
|
const bgfx::Memory* vs_font_distance_field_subpixel;
|
||||||
|
const bgfx::Memory* fs_font_distance_field_subpixel;
|
||||||
|
|
||||||
|
switch (bgfx::getRendererType() )
|
||||||
|
{
|
||||||
|
case bgfx::RendererType::Direct3D9:
|
||||||
|
vs_font_basic = bgfx::makeRef(vs_font_basic_dx9, sizeof(vs_font_basic_dx9) );
|
||||||
|
fs_font_basic = bgfx::makeRef(fs_font_basic_dx9, sizeof(fs_font_basic_dx9) );
|
||||||
|
vs_font_distance_field = bgfx::makeRef(vs_font_distance_field_dx9, sizeof(vs_font_distance_field_dx9) );
|
||||||
|
fs_font_distance_field = bgfx::makeRef(fs_font_distance_field_dx9, sizeof(fs_font_distance_field_dx9) );
|
||||||
|
vs_font_distance_field_subpixel = bgfx::makeRef(vs_font_distance_field_subpixel_dx9, sizeof(vs_font_distance_field_subpixel_dx9) );
|
||||||
|
fs_font_distance_field_subpixel = bgfx::makeRef(fs_font_distance_field_subpixel_dx9, sizeof(fs_font_distance_field_subpixel_dx9) );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case bgfx::RendererType::Direct3D11:
|
||||||
|
vs_font_basic = bgfx::makeRef(vs_font_basic_dx11, sizeof(vs_font_basic_dx11) );
|
||||||
|
fs_font_basic = bgfx::makeRef(fs_font_basic_dx11, sizeof(fs_font_basic_dx11) );
|
||||||
|
vs_font_distance_field = bgfx::makeRef(vs_font_distance_field_dx11, sizeof(vs_font_distance_field_dx11) );
|
||||||
|
fs_font_distance_field = bgfx::makeRef(fs_font_distance_field_dx11, sizeof(fs_font_distance_field_dx11) );
|
||||||
|
vs_font_distance_field_subpixel = bgfx::makeRef(vs_font_distance_field_subpixel_dx11, sizeof(vs_font_distance_field_subpixel_dx11) );
|
||||||
|
fs_font_distance_field_subpixel = bgfx::makeRef(fs_font_distance_field_subpixel_dx11, sizeof(fs_font_distance_field_subpixel_dx11) );
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
vs_font_basic = bgfx::makeRef(vs_font_basic_glsl, sizeof(vs_font_basic_glsl) );
|
||||||
|
fs_font_basic = bgfx::makeRef(fs_font_basic_glsl, sizeof(fs_font_basic_glsl) );
|
||||||
|
vs_font_distance_field = bgfx::makeRef(vs_font_distance_field_glsl, sizeof(vs_font_distance_field_glsl) );
|
||||||
|
fs_font_distance_field = bgfx::makeRef(fs_font_distance_field_glsl, sizeof(fs_font_distance_field_glsl) );
|
||||||
|
vs_font_distance_field_subpixel = bgfx::makeRef(vs_font_distance_field_subpixel_glsl, sizeof(vs_font_distance_field_subpixel_glsl) );
|
||||||
|
fs_font_distance_field_subpixel = bgfx::makeRef(fs_font_distance_field_subpixel_glsl, sizeof(fs_font_distance_field_subpixel_glsl) );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
bgfx::VertexShaderHandle vsh;
|
||||||
|
bgfx::FragmentShaderHandle fsh;
|
||||||
|
|
||||||
|
vsh = bgfx::createVertexShader(vs_font_basic);
|
||||||
|
fsh = bgfx::createFragmentShader(fs_font_basic);
|
||||||
|
m_basicProgram = bgfx::createProgram(vsh, fsh);
|
||||||
|
bgfx::destroyVertexShader(vsh);
|
||||||
|
bgfx::destroyFragmentShader(fsh);
|
||||||
|
|
||||||
|
vsh = bgfx::createVertexShader(vs_font_distance_field);
|
||||||
|
fsh = bgfx::createFragmentShader(fs_font_distance_field);
|
||||||
|
m_distanceProgram = bgfx::createProgram(vsh, fsh);
|
||||||
|
bgfx::destroyVertexShader(vsh);
|
||||||
|
bgfx::destroyFragmentShader(fsh);
|
||||||
|
|
||||||
|
vsh = bgfx::createVertexShader(vs_font_distance_field_subpixel);
|
||||||
|
fsh = bgfx::createFragmentShader(fs_font_distance_field_subpixel);
|
||||||
|
m_distanceSubpixelProgram = bgfx::createProgram(vsh, fsh);
|
||||||
|
bgfx::destroyVertexShader(vsh);
|
||||||
|
bgfx::destroyFragmentShader(fsh);
|
||||||
|
|
||||||
|
m_vertexDecl.begin();
|
||||||
|
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.end();
|
||||||
|
|
||||||
|
u_texColor = bgfx::createUniform("u_texColor", bgfx::UniformType::Uniform1iv);
|
||||||
|
u_inverse_gamma = bgfx::createUniform("u_inverse_gamma", bgfx::UniformType::Uniform1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
TextBufferManager::~TextBufferManager()
|
TextBufferManager::~TextBufferManager()
|
||||||
|
@ -489,64 +564,11 @@ TextBufferManager::~TextBufferManager()
|
||||||
bgfx::destroyUniform(u_texColor);
|
bgfx::destroyUniform(u_texColor);
|
||||||
bgfx::destroyUniform(u_inverse_gamma);
|
bgfx::destroyUniform(u_inverse_gamma);
|
||||||
|
|
||||||
//bgfx::destroyProgram(m_basicProgram);
|
bgfx::destroyProgram(m_basicProgram);
|
||||||
//bgfx::destroyProgram(m_distanceProgram);
|
bgfx::destroyProgram(m_distanceProgram);
|
||||||
//bgfx::destroyProgram(m_distanceSubpixelProgram);
|
bgfx::destroyProgram(m_distanceSubpixelProgram);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextBufferManager::init(bgfx::ProgramHandle _basicProgram, bgfx::ProgramHandle _distanceProgram, bgfx::ProgramHandle _distanceSubpixelProgram)
|
|
||||||
{
|
|
||||||
m_basicProgram = _basicProgram;
|
|
||||||
m_distanceProgram = _distanceProgram;
|
|
||||||
m_distanceSubpixelProgram = _distanceSubpixelProgram;
|
|
||||||
|
|
||||||
m_vertexDecl.begin();
|
|
||||||
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.end();
|
|
||||||
|
|
||||||
u_texColor = bgfx::createUniform("u_texColor", bgfx::UniformType::Uniform1iv);
|
|
||||||
u_inverse_gamma = bgfx::createUniform("u_inverse_gamma", bgfx::UniformType::Uniform1f);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
void TextBufferManager::init(const char* _shaderPath)
|
|
||||||
{
|
|
||||||
m_vertexDecl.begin();
|
|
||||||
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.end();
|
|
||||||
|
|
||||||
u_texColor = bgfx::createUniform("u_texColor", bgfx::UniformType::Uniform1iv);
|
|
||||||
u_inverse_gamma = bgfx::createUniform("u_inverse_gamma", bgfx::UniformType::Uniform1f);
|
|
||||||
|
|
||||||
const bgfx::Memory* mem;
|
|
||||||
mem = loadShader(_shaderPath, "vs_font_basic");
|
|
||||||
bgfx::VertexShaderHandle vsh = bgfx::createVertexShader(mem);
|
|
||||||
mem = loadShader(_shaderPath, "fs_font_basic");
|
|
||||||
bgfx::FragmentShaderHandle fsh = bgfx::createFragmentShader(mem);
|
|
||||||
m_basicProgram = bgfx::createProgram(vsh, fsh);
|
|
||||||
bgfx::destroyVertexShader(vsh);
|
|
||||||
bgfx::destroyFragmentShader(fsh);
|
|
||||||
|
|
||||||
mem = loadShader(_shaderPath, "vs_font_distance_field");
|
|
||||||
vsh = bgfx::createVertexShader(mem);
|
|
||||||
mem = loadShader(_shaderPath, "fs_font_distance_field");
|
|
||||||
fsh = bgfx::createFragmentShader(mem);
|
|
||||||
m_distanceProgram = bgfx::createProgram(vsh, fsh);
|
|
||||||
bgfx::destroyVertexShader(vsh);
|
|
||||||
bgfx::destroyFragmentShader(fsh);
|
|
||||||
|
|
||||||
mem = loadShader(_shaderPath, "vs_font_distance_field_subpixel");
|
|
||||||
vsh = bgfx::createVertexShader(mem);
|
|
||||||
mem = loadShader(_shaderPath, "fs_font_distance_field_subpixel");
|
|
||||||
fsh = bgfx::createFragmentShader(mem);
|
|
||||||
m_distanceSubpixelProgram = bgfx::createProgram(vsh, fsh);
|
|
||||||
bgfx::destroyVertexShader(vsh);
|
|
||||||
bgfx::destroyFragmentShader(fsh);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
TextBufferHandle TextBufferManager::createTextBuffer(FontType _type, BufferType _bufferType)
|
TextBufferHandle TextBufferManager::createTextBuffer(FontType _type, BufferType _bufferType)
|
||||||
{
|
{
|
||||||
uint16_t textIdx = m_textBufferHandles.alloc();
|
uint16_t textIdx = m_textBufferHandles.alloc();
|
||||||
|
|
|
@ -31,11 +31,6 @@ public:
|
||||||
TextBufferManager(FontManager* _fontManager = NULL);
|
TextBufferManager(FontManager* _fontManager = NULL);
|
||||||
~TextBufferManager();
|
~TextBufferManager();
|
||||||
|
|
||||||
//shaders program
|
|
||||||
|
|
||||||
void init(bgfx::ProgramHandle _basicProgram, bgfx::ProgramHandle _distanceProgram, bgfx::ProgramHandle _distanceSubpixelProgram);
|
|
||||||
//void init(const char* _shaderPath);
|
|
||||||
|
|
||||||
TextBufferHandle createTextBuffer(FontType _type, BufferType _bufferType);
|
TextBufferHandle createTextBuffer(FontType _type, BufferType _bufferType);
|
||||||
void destroyTextBuffer(TextBufferHandle _handle);
|
void destroyTextBuffer(TextBufferHandle _handle);
|
||||||
void submitTextBuffer(TextBufferHandle _handle, uint8_t _id, int32_t _depth = 0);
|
void submitTextBuffer(TextBufferHandle _handle, uint8_t _id, int32_t _depth = 0);
|
||||||
|
|
Loading…
Reference in a new issue