简介
本序列由澳大利亚的一个游戏引擎爱好者整理制作,使用了前瞻的语言技术,
经常多次的修改制作,一个个小的知识点贯通,非常具有引导学习意义!
Bilibili站转载学习,非个人研究,鸣谢!
原作者Github
Bilibili直达链接
YouTube直达链接
#1 基于OpenGL的Shader封装数据
#2 程序化的Shader编程
#1 基于OpenGL的Shader封装数据
// Buffer.h
#pragma once
namespace Aurora
{
// 当前Shader定义的数据类型
enum class ShaderDataType
{
None = 0, Float, Float2, Float3, Float4, Mat3, Mat4, Int, Int2, Int3, Int4, Bool
};
// Shader数据内存大小
static uint32_t ShaderDataTypeSize(ShaderDataType type)
{
switch (type)
{
case ShaderDataType::Float: return 4;
case ShaderDataType::Float2: return 4 * 2;
case ShaderDataType::Float3: return 4 * 3;
case ShaderDataType::Float4: return 4 * 4;
case ShaderDataType::Mat3: return 4 * 3 * 3;
case ShaderDataType::Mat4: return 4 * 4 * 4;
case ShaderDataType::Int: return 4;
case ShaderDataType::Int2: return 4 * 2;
case ShaderDataType::Int3: return 4 * 3;
case ShaderDataType::Int4: return 4 * 4;
case ShaderDataType::Bool: return 1;
}
AO_CORE_ASSERT(false, "Unknown ShaderDataType!");
return 0;
}
// Shader整套数据类型封装,比如a_Color=xxx
struct BufferElement
{
std::string Name;
ShaderDataType Type;
uint32_t Size;
uint32_t Offset;
bool Normalized;
BufferElement() {
}
BufferElement(ShaderDataType type, const std::string& name, bool normalized = false)
:Name(name), Type(type), Size(ShaderDataTypeSize(type)), Offset(0), Normalized(normalized)