summaryrefslogtreecommitdiff
path: root/Runtime/Graphics
diff options
context:
space:
mode:
Diffstat (limited to 'Runtime/Graphics')
-rw-r--r--Runtime/Graphics/DefaultVertexLayout.cpp4
-rw-r--r--Runtime/Graphics/DefaultVertexLayout.h22
-rw-r--r--Runtime/Graphics/Texture.cpp117
-rw-r--r--Runtime/Graphics/Texture.h5
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;