Wildvine Engine
Referencia Doxygen del codigo propio de Wildvine Engine.
Cargando...
Buscando...
Nada coincide
Referencia de la clase ShaderProgram

Encapsula la creación, compilación y uso de Vertex Shader y Pixel Shader en Direct3D 11. Más...

#include <ShaderProgram.h>

+ Diagrama de colaboración de ShaderProgram:

Métodos públicos

HRESULT CompileShaderFromFile (char *szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob **ppBlobOut)
 Compila un shader desde archivo.
 
HRESULT CreateInputLayout (Device &device, LayoutBuilder)
 Crea un Input Layout asociado al Vertex Shader.
 
HRESULT CreateShader (Device &device, ShaderType type)
 Crea un shader (Vertex o Pixel) a partir del archivo establecido en m_shaderFileName.
 
HRESULT CreateShader (Device &device, ShaderType type, const std::string &fileName)
 Crea un shader (Vertex o Pixel) a partir de un archivo HLSL.
 
void destroy ()
 Libera todos los recursos asociados (shaders, blobs e input layout).
 
HRESULT init (Device &device, const std::string &fileName, LayoutBuilder layoutBuilder)
 Inicializa el programa de shaders desde un archivo HLSL.
 
void render (DeviceContext &deviceContext)
 Aplica el Vertex Shader, Pixel Shader e Input Layout al pipeline.
 
void render (DeviceContext &deviceContext, ShaderType type)
 Aplica únicamente un shader específico al pipeline.
 
 ShaderProgram ()=default
 Constructor por defecto.
 
void update ()
 Actualiza parámetros internos de los shaders.
 
 ~ShaderProgram ()=default
 Destructor por defecto.
 

Atributos públicos

InputLayout m_inputLayout
 Input Layout asociado al Vertex Shader.
 
ID3D11PixelShader * m_PixelShader = nullptr
 Pixel Shader compilado y creado en GPU.
 
ID3D11VertexShader * m_VertexShader = nullptr
 Vertex Shader compilado y creado en GPU.
 

Atributos privados

ID3DBlob * m_pixelShaderData = nullptr
 Bytecode compilado del Pixel Shader.
 
std::string m_shaderFileName
 Nombre del archivo HLSL asociado a este programa de shaders.
 
ID3DBlob * m_vertexShaderData = nullptr
 Bytecode compilado del Vertex Shader.
 

Descripción detallada

Esta clase administra el ciclo de vida de un conjunto de shaders (VS y PS), incluyendo su compilación desde archivo, creación en el dispositivo y vinculación al pipeline. Además, maneja el Input Layout asociado al Vertex Shader.

Definición en la línea 22 del archivo ShaderProgram.h.

Documentación de constructores y destructores

◆ ShaderProgram()

ShaderProgram::ShaderProgram ( )
default

◆ ~ShaderProgram()

ShaderProgram::~ShaderProgram ( )
default

No libera automáticamente los recursos COM; llamar a destroy().

Documentación de funciones miembro

◆ CompileShaderFromFile()

HRESULT ShaderProgram::CompileShaderFromFile ( char *  szFileName,
LPCSTR  szEntryPoint,
LPCSTR  szShaderModel,
ID3DBlob **  ppBlobOut 
)

Llama internamente a D3DCompileFromFile para obtener el bytecode de un shader en función de su punto de entrada y modelo.

Parámetros
szFileNameRuta del archivo HLSL.
szEntryPointPunto de entrada de la función shader (ej. "VSMain").
szShaderModelModelo de shader (ej. "vs_5_0", "ps_5_0").
ppBlobOutSalida con el bytecode compilado.
Devuelve
S_OK si fue exitoso; código HRESULT en caso de error.

Definición en la línea 170 del archivo ShaderProgram.cpp.

Hace referencia a ERROR y SAFE_RELEASE.

Referenciado por CreateShader().

◆ CreateInputLayout()

HRESULT ShaderProgram::CreateInputLayout ( Device device,
LayoutBuilder  layoutBuilder 
)
Parámetros
deviceDispositivo con el que se creará el recurso.
LayoutDescripción de los elementos de entrada.
Devuelve
S_OK si fue exitoso; código HRESULT en caso de error.

Definición en la línea 54 del archivo ShaderProgram.cpp.

Hace referencia a ERROR, LayoutBuilder::Get(), InputLayout::init(), Device::m_device, m_inputLayout, m_vertexShaderData y SAFE_RELEASE.

Referenciado por init().

◆ CreateShader() [1/2]

HRESULT ShaderProgram::CreateShader ( Device device,
ShaderType  type 
)
Parámetros
deviceDispositivo con el que se creará el recurso.
typeTipo de shader a crear.
Devuelve
S_OK si fue exitoso; código HRESULT en caso de error.

Definición en la línea 82 del archivo ShaderProgram.cpp.

Hace referencia a CompileShaderFromFile(), Device::CreatePixelShader(), Device::CreateVertexShader(), ERROR, Device::m_device, m_PixelShader, m_pixelShaderData, m_shaderFileName, m_VertexShader, m_vertexShaderData, PIXEL_SHADER y SAFE_RELEASE.

Referenciado por CreateShader() y init().

◆ CreateShader() [2/2]

HRESULT ShaderProgram::CreateShader ( Device device,
ShaderType  type,
const std::string &  fileName 
)
Parámetros
deviceDispositivo con el que se creará el recurso.
typeTipo de shader a crear.
fileNameNombre del archivo HLSL.
Devuelve
S_OK si fue exitoso; código HRESULT en caso de error.

Definición en la línea 145 del archivo ShaderProgram.cpp.

Hace referencia a CreateShader(), ERROR, Device::m_device y m_shaderFileName.

◆ destroy()

void ShaderProgram::destroy ( )
Postcondición
m_VertexShader == nullptr, m_PixelShader == nullptr, m_vertexShaderData == nullptr, m_pixelShaderData == nullptr.

Definición en la línea 249 del archivo ShaderProgram.cpp.

Hace referencia a InputLayout::destroy(), m_inputLayout, m_PixelShader, m_pixelShaderData, m_VertexShader, m_vertexShaderData y SAFE_RELEASE.

Referenciado por BaseApp::destroy() y ForwardRenderer::destroy().

◆ init()

HRESULT ShaderProgram::init ( Device device,
const std::string &  fileName,
LayoutBuilder  layoutBuilder 
)

Compila y crea los shaders (VS y PS) definidos en el archivo indicado, además de crear el Input Layout con la descripción proporcionada.

Parámetros
deviceDispositivo con el que se crearán los recursos.
fileNameNombre del archivo HLSL que contiene los shaders.
LayoutVector con la descripción de los elementos de entrada (para VS).
Devuelve
S_OK si fue exitoso; código HRESULT en caso de error.
Postcondición
Si retorna S_OK, los punteros a shaders y el input layout serán válidos.

Definición en la línea 13 del archivo ShaderProgram.cpp.

Hace referencia a CreateInputLayout(), CreateShader(), ERROR, Device::m_device, m_shaderFileName, PIXEL_SHADER y VERTEX_SHADER.

Referenciado por ForwardRenderer::createShadowResources(), BaseApp::init() y Skybox::init().

◆ render() [1/2]

void ShaderProgram::render ( DeviceContext deviceContext)

Llama a VSSetShader, PSSetShader y asigna el input layout al contexto.

Parámetros
deviceContextContexto donde se aplicará el programa de shaders.
Precondición
Los shaders deben haberse creado con init() o CreateShader().

Definición en la línea 219 del archivo ShaderProgram.cpp.

Hace referencia a ERROR, DeviceContext::m_deviceContext, InputLayout::m_inputLayout, m_inputLayout, m_PixelShader, m_VertexShader y InputLayout::render().

Referenciado por Skybox::render(), ForwardRenderer::renderObject() y ForwardRenderer::renderShadowObject().

◆ render() [2/2]

void ShaderProgram::render ( DeviceContext deviceContext,
ShaderType  type 
)

Permite vincular solo el Vertex Shader o solo el Pixel Shader, según el parámetro type.

Parámetros
deviceContextContexto donde se aplicará el shader.
typeTipo de shader a establecer (VS o PS).

Definición en la línea 231 del archivo ShaderProgram.cpp.

Hace referencia a ERROR, DeviceContext::m_deviceContext, m_PixelShader, m_VertexShader, PIXEL_SHADER y VERTEX_SHADER.

◆ update()

void ShaderProgram::update ( )

Método de marcador para futuras extensiones (por ejemplo, recompilar shaders en caliente).

Nota
Actualmente no realiza ninguna operación.

Documentación de datos miembro

◆ m_inputLayout

InputLayout ShaderProgram::m_inputLayout

Definición en la línea 160 del archivo ShaderProgram.h.

Referenciado por CreateInputLayout(), destroy() y render().

◆ m_PixelShader

ID3D11PixelShader* ShaderProgram::m_PixelShader = nullptr

Definición en la línea 155 del archivo ShaderProgram.h.

Referenciado por CreateShader(), destroy(), render() y render().

◆ m_pixelShaderData

ID3DBlob* ShaderProgram::m_pixelShaderData = nullptr
private

Definición en la línea 176 del archivo ShaderProgram.h.

Referenciado por CreateShader() y destroy().

◆ m_shaderFileName

std::string ShaderProgram::m_shaderFileName
private

Definición en la línea 166 del archivo ShaderProgram.h.

Referenciado por CreateShader(), CreateShader() y init().

◆ m_VertexShader

ID3D11VertexShader* ShaderProgram::m_VertexShader = nullptr

Definición en la línea 150 del archivo ShaderProgram.h.

Referenciado por CreateShader(), destroy(), render(), render() y ForwardRenderer::renderShadowPass().

◆ m_vertexShaderData

ID3DBlob* ShaderProgram::m_vertexShaderData = nullptr
private

Definición en la línea 171 del archivo ShaderProgram.h.

Referenciado por CreateInputLayout(), CreateShader() y destroy().


La documentación de esta clase está generada de los siguientes archivos: