diff options
Diffstat (limited to 'Runtime/Graphics')
-rw-r--r-- | Runtime/Graphics/DefaultVertexLayout.cpp | 4 | ||||
-rw-r--r-- | Runtime/Graphics/DefaultVertexLayout.h | 22 | ||||
-rw-r--r-- | Runtime/Graphics/Texture.cpp | 117 | ||||
-rw-r--r-- | Runtime/Graphics/Texture.h | 5 |
4 files changed, 82 insertions, 66 deletions
diff --git a/Runtime/Graphics/DefaultVertexLayout.cpp b/Runtime/Graphics/DefaultVertexLayout.cpp index 0781c2e..a468100 100644 --- a/Runtime/Graphics/DefaultVertexLayout.cpp +++ b/Runtime/Graphics/DefaultVertexLayout.cpp @@ -30,8 +30,8 @@ namespace VertexLayout if (attr == VertexAttr_Color) return true; /* - if (format == VertexAttrFormat_Color || format == VertexAttrFormat_Byte) - return true; + if (format == VertexAttrFormat_Color || format == VertexAttrFormat_Byte) + return true; */ return false; } diff --git a/Runtime/Graphics/DefaultVertexLayout.h b/Runtime/Graphics/DefaultVertexLayout.h index fbb1f76..be5437c 100644 --- a/Runtime/Graphics/DefaultVertexLayout.h +++ b/Runtime/Graphics/DefaultVertexLayout.h @@ -7,7 +7,7 @@ #include "GPUDataBuffer.h" #include "VertexAttribute.h" -// 默认的顶点布局,适用于Mesh导入的结果,保持shader的一致性 +// 默认的顶点布局,适用于Mesh导入的结果,以保持shader的一致性 // 如果需要修改布局,比如编辑器UI中,用CustomVertexLayout // 默认的顶点属性以及顺序 @@ -36,16 +36,16 @@ struct DefaultVertexLayout namespace VertexLayout { // ibo无论是default还是custom布局都是short - extern uint GetDefaultIndexSize(); - extern GLenum GetDefaultIndexFormat(); - - extern uint32 GetDynamicChunkStride(uint32 vertexAttrMask); - extern bool IsGLVertexAttrNeedNormalized(uint attr); - extern uint GetDefaultShaderChannelFormat(uint attr); - extern uint32 GetDefaultVertexAttrSize(int attr); - extern uint GetDefaultVertexAttrDimension(uint attr); - extern uint GetDefaultShaderChannelDimension(uint attr); - extern GLenum GetDefaultVertexAttrComponentType(uint attr); + uint GetDefaultIndexSize(); + GLenum GetDefaultIndexFormat(); + + uint32 GetDynamicChunkStride(uint32 vertexAttrMask); + bool IsGLVertexAttrNeedNormalized(uint attr); + uint GetDefaultShaderChannelFormat(uint attr); + uint32 GetDefaultVertexAttrSize(int attr); + uint GetDefaultVertexAttrDimension(uint attr); + uint GetDefaultShaderChannelDimension(uint attr); + GLenum GetDefaultVertexAttrComponentType(uint attr); void SetupDefaultVertexLayout(const DefaultVertexLayout& info); void InvalidateVertexInputCache(); diff --git a/Runtime/Graphics/Texture.cpp b/Runtime/Graphics/Texture.cpp index 1fdc0ca..6b682e9 100644 --- a/Runtime/Graphics/Texture.cpp +++ b/Runtime/Graphics/Texture.cpp @@ -3,44 +3,66 @@ using namespace LuaBind;
+
+Texture::Texture(TextureSetting setting, ImageData* imgData)
+ : NativeClass<Texture>()
+{
+ Init(setting, imgData);
+ // force not keep imgData
+ m_KeepPixelData = false;
+}
+
Texture::Texture(LuaBind::VM* vm, TextureSetting setting, ImageData* imgData)
: NativeClass<Texture>(vm)
{
- m_Width = imgData->width;
- m_Height = imgData->height;
- m_Type = setting.type;
- m_Format = setting.format;
- m_WrapMode = setting.wrapMode;
- m_FilterMode = setting.filterMode;
- m_KeepPixelData = setting.keepImageData;
+ Init(setting, imgData);
+ // keep image data ?
+ if (m_KeepPixelData)
+ {
+ LuaBind::State state = vm->GetCurThread();
+ imgData->PushUserdata(state);
+ SetMemberRef(state, m_ImageData, -1);
+ state.Pop(1);
+ }
+}
- glGenTextures(1, &m_GPUID);
- glBindTexture(GL_TEXTURE_2D, m_GPUID);
+void Texture::Init(TextureSetting setting, ImageData* imgData)
+{
+ m_Width = imgData->width;
+ m_Height = imgData->height;
+ m_Type = setting.type;
+ m_Format = setting.format;
+ m_WrapMode = setting.wrapMode;
+ m_FilterMode = setting.filterMode;
+ m_KeepPixelData = setting.keepImageData;
+
+ glGenTextures(1, &m_GPUID);
+ glBindTexture(GL_TEXTURE_2D, m_GPUID);
CheckGLError(
glDeleteTextures(1, &m_GPUID);
glBindTexture(GL_TEXTURE_2D, 0);
throw TextureException(error);
);
-
- switch (m_WrapMode) {
- case ETextureWrapMode::Clamp:
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- break;
- case ETextureWrapMode::Repeat:
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
- break;
- case ETextureWrapMode::Mirror:
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
- break;
- default:
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
- break;
- }
+
+ switch (m_WrapMode) {
+ case ETextureWrapMode::Clamp:
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+ break;
+ case ETextureWrapMode::Repeat:
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ break;
+ case ETextureWrapMode::Mirror:
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
+ break;
+ default:
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+ break;
+ }
CheckGLError(
glDeleteTextures(1, &m_GPUID);
@@ -48,37 +70,28 @@ Texture::Texture(LuaBind::VM* vm, TextureSetting setting, ImageData* imgData) throw TextureException(error);
);
- switch (m_FilterMode) {
- case ETextureFilterMode::Linear:
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- break;
- case ETextureFilterMode::Nearest:
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- break;
- default:
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- break;
- }
+ switch (m_FilterMode) {
+ case ETextureFilterMode::Linear:
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ break;
+ case ETextureFilterMode::Nearest:
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ break;
+ default:
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ break;
+ }
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, imgData->width, imgData->height, 0, GL_RGB, GL_UNSIGNED_BYTE, imgData->pixels);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, imgData->width, imgData->height, 0, GL_RGB, GL_UNSIGNED_BYTE, imgData->pixels);
CheckGLError(
glDeleteTextures(1, &m_GPUID);
glBindTexture(GL_TEXTURE_2D, 0);
throw TextureException(error);
);
-
- // keep image data ?
- if (m_KeepPixelData)
- {
- LuaBind::State state = vm->GetCurThread();
- imgData->PushUserdata(state);
- SetMemberRef(state, m_ImageData, -1);
- state.Pop(1);
- }
}
Texture::~Texture()
diff --git a/Runtime/Graphics/Texture.h b/Runtime/Graphics/Texture.h index 1aa8bdf..d02634c 100644 --- a/Runtime/Graphics/Texture.h +++ b/Runtime/Graphics/Texture.h @@ -61,6 +61,7 @@ public: class Texture : public LuaBind::NativeClass<Texture> { public: + Texture(TextureSetting setting, ImageData* imgData)/*throw TextureException*/; Texture(LuaBind::VM* vm, TextureSetting setting, ImageData* imgData)/*throw TextureException*/; ~Texture(); @@ -69,7 +70,9 @@ public: GET(GLuint, GpuID, m_GPUID); -protected: +private: + void Init(TextureSetting setting, ImageData* imgData); + GLuint m_GPUID; int m_Width, m_Height; |