Files
XCEngine/docs/api/rhi/opengl/opengl-texture.md

3.6 KiB
Raw Blame History

OpenGLTexture

OpenGL 纹理的实现,封装 OpenGL texture object。

头文件

#include <XCEngine/RHI/OpenGL/OpenGLTexture.h>

继承关系

RHITexture (interface)
└── OpenGLTexture (implementation)

枚举

OpenGLTextureType

描述
Texture1D 1D 纹理
Texture2D 2D 纹理
Texture2DArray 2D 纹理数组
Texture3D 3D 纹理
TextureCube 立方体贴图
TextureCubeArray 立方体贴图数组

OpenGLFormat / OpenGLInternalFormat

OpenGLFormat OpenGLInternalFormat 描述
R8 1 单通道 8-bit
RG8 2 双通道 8-bit
RGBA8 4 四通道 8-bit
RGBA16F 11 四通道 16-bit float
RGBA32F 16 四通道 32-bit float
Depth24Stencil8 38 24-bit depth + 8-bit stencil
Depth32F 31 32-bit float depth
CompressedDXT1 21 DXT1 压缩
CompressedDXT5 22 DXT5 压缩

公共成员函数

构造函数与析构函数

OpenGLTexture()

~OpenGLTexture() override

初始化

bool Initialize(OpenGLTextureType type, int width, int height, int depth, int mipLevels, OpenGLFormat format, const void* data = nullptr)

通用初始化。

bool Initialize2D(int width, int height, int channels, const void* data, bool generateMipmap = true)

便捷的 2D 纹理初始化。

  • channels: 通道数 (1-4)

bool InitializeCubeMap(int size, int mipLevels, OpenGLFormat format, const void* data = nullptr)

初始化立方体贴图。

bool LoadFromFile(const char* path, bool flipVertical = true)

从图片文件加载纹理(需要 stb_image

void Shutdown() override

绑定操作

void Bind(int slot = 0) const

绑定纹理到纹理单元。

void Unbind() const

void BindImage(int slot, bool read, bool write) const

绑定为 image texture用于 compute shader

纹理操作

void GenerateMipmap()

生成 Mipmap。

void SetFiltering(int minFilter, int magFilter)

设置过滤模式。

void SetWrapping(int wrapS, int wrapT, int wrapR = -1)

设置纹理环绕模式。

属性

unsigned int GetID() const

获取 OpenGL texture ID。

OpenGLTextureType GetOpenGLType() const

获取纹理类型。

uint32_t GetWidth() const override

uint32_t GetHeight() const override

uint32_t GetDepth() const override

uint32_t GetMipLevels() const override

TextureType GetTextureType() const override

转换为 RHI TextureType。

void* GetNativeHandle() override

Format GetFormat() const override / void SetFormat(Format format)

const std::string& GetName() const override / void SetName(...)

内部成员

成员 类型 描述
m_texture unsigned int GL texture ID
m_type OpenGLTextureType 纹理类型
m_width/height/depth int 尺寸
m_mipLevels int Mipmap 级别
m_channels int 通道数
m_format Format RHI 格式
m_name std::string 名称

使用示例

// Load from file
OpenGLTexture diffuse;
diffuse.LoadFromFile("textures/diffuse.png");

// Create from data
OpenGLTexture texture;
unsigned char pixels[] = { ... };
texture.Initialize2D(512, 512, 4, pixels);
texture.SetFiltering(GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR);
texture.SetWrapping(GL_REPEAT, GL_REPEAT);
texture.GenerateMipmap();

// Bind
texture.Bind(0);
glBindTextureUnit(0, texture.GetID());

// Compute image binding
texture.BindImage(0, true, false);