mirror of
https://github.com/bloeys/nmage.git
synced 2025-12-29 13:28:20 +00:00
Add all gl BufUsage values+support bufusage in ubo
This commit is contained in:
@ -9,25 +9,48 @@ import (
|
|||||||
|
|
||||||
type BufUsage int
|
type BufUsage int
|
||||||
|
|
||||||
|
// Full docs for buffer usage can be found here: https://registry.khronos.org/OpenGL-Refpages/gl4/html/glBufferData.xhtml
|
||||||
const (
|
const (
|
||||||
BufUsage_Unknown BufUsage = iota
|
BufUsage_Unknown BufUsage = iota
|
||||||
|
|
||||||
//Buffer is set only once and used many times
|
//Buffer is set only once and used many times
|
||||||
BufUsage_Static
|
BufUsage_Static_Draw
|
||||||
//Buffer is changed a lot and used many times
|
//Buffer is changed a lot and used many times
|
||||||
BufUsage_Dynamic
|
BufUsage_Dynamic_Draw
|
||||||
//Buffer is set only once and used by the GPU at most a few times
|
//Buffer is set only once and used by the GPU at most a few times
|
||||||
BufUsage_Stream
|
BufUsage_Stream_Draw
|
||||||
|
|
||||||
|
BufUsage_Static_Read
|
||||||
|
BufUsage_Dynamic_Read
|
||||||
|
BufUsage_Stream_Read
|
||||||
|
|
||||||
|
BufUsage_Static_Copy
|
||||||
|
BufUsage_Dynamic_Copy
|
||||||
|
BufUsage_Stream_Copy
|
||||||
)
|
)
|
||||||
|
|
||||||
func (b BufUsage) ToGL() uint32 {
|
func (b BufUsage) ToGL() uint32 {
|
||||||
switch b {
|
switch b {
|
||||||
case BufUsage_Static:
|
case BufUsage_Static_Draw:
|
||||||
return gl.STATIC_DRAW
|
return gl.STATIC_DRAW
|
||||||
case BufUsage_Dynamic:
|
case BufUsage_Dynamic_Draw:
|
||||||
return gl.DYNAMIC_DRAW
|
return gl.DYNAMIC_DRAW
|
||||||
case BufUsage_Stream:
|
case BufUsage_Stream_Draw:
|
||||||
return gl.STREAM_DRAW
|
return gl.STREAM_DRAW
|
||||||
|
|
||||||
|
case BufUsage_Static_Read:
|
||||||
|
return gl.STATIC_READ
|
||||||
|
case BufUsage_Dynamic_Read:
|
||||||
|
return gl.DYNAMIC_READ
|
||||||
|
case BufUsage_Stream_Read:
|
||||||
|
return gl.STREAM_READ
|
||||||
|
|
||||||
|
case BufUsage_Static_Copy:
|
||||||
|
return gl.STATIC_COPY
|
||||||
|
case BufUsage_Dynamic_Copy:
|
||||||
|
return gl.DYNAMIC_COPY
|
||||||
|
case BufUsage_Stream_Copy:
|
||||||
|
return gl.STREAM_COPY
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.T(false, fmt.Sprintf("Unexpected BufUsage value '%v'", b))
|
assert.T(false, fmt.Sprintf("Unexpected BufUsage value '%v'", b))
|
||||||
|
|||||||
@ -27,9 +27,9 @@ func (ib *IndexBuffer) SetData(values []uint32) {
|
|||||||
ib.IndexBufCount = int32(len(values))
|
ib.IndexBufCount = int32(len(values))
|
||||||
|
|
||||||
if sizeInBytes == 0 {
|
if sizeInBytes == 0 {
|
||||||
gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, 0, gl.Ptr(nil), BufUsage_Static.ToGL())
|
gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, 0, gl.Ptr(nil), BufUsage_Static_Draw.ToGL())
|
||||||
} else {
|
} else {
|
||||||
gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, sizeInBytes, gl.Ptr(&values[0]), BufUsage_Static.ToGL())
|
gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, sizeInBytes, gl.Ptr(&values[0]), BufUsage_Static_Draw.ToGL())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -728,7 +728,7 @@ func ReflectValueMatchesUniformBufferField(v reflect.Value, ubField *UniformBuff
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUniformBuffer(fields []UniformBufferFieldInput) UniformBuffer {
|
func NewUniformBuffer(fields []UniformBufferFieldInput, usage BufUsage) UniformBuffer {
|
||||||
|
|
||||||
ub := UniformBuffer{}
|
ub := UniformBuffer{}
|
||||||
|
|
||||||
@ -740,7 +740,7 @@ func NewUniformBuffer(fields []UniformBufferFieldInput) UniformBuffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ub.Bind()
|
ub.Bind()
|
||||||
gl.BufferData(gl.UNIFORM_BUFFER, int(ub.Size), gl.Ptr(nil), gl.STATIC_DRAW)
|
gl.BufferData(gl.UNIFORM_BUFFER, int(ub.Size), gl.Ptr(nil), usage.ToGL())
|
||||||
ub.UnBind()
|
ub.UnBind()
|
||||||
|
|
||||||
return ub
|
return ub
|
||||||
|
|||||||
8
main.go
8
main.go
@ -39,9 +39,9 @@ import (
|
|||||||
- Normals maps ✅
|
- Normals maps ✅
|
||||||
- HDR ✅
|
- HDR ✅
|
||||||
- Fix bad point light acne ✅
|
- Fix bad point light acne ✅
|
||||||
- UBO support
|
- UBO support ✅
|
||||||
- Skeletal animations
|
- Skeletal animations
|
||||||
- Cascaded shadow mapping
|
- (?) Cascaded shadow mapping
|
||||||
- In some cases we DO want input even when captured by UI. We need two systems within input package, one filtered and one not✅
|
- In some cases we DO want input even when captured by UI. We need two systems within input package, one filtered and one not✅
|
||||||
- (?) Support OpenGL 4.1 and 4.6, and default to 4.6
|
- (?) Support OpenGL 4.1 and 4.6, and default to 4.6
|
||||||
- Proper model loading (i.e. load model by reading all its meshes, textures, and so on together)
|
- Proper model loading (i.e. load model by reading all its meshes, textures, and so on together)
|
||||||
@ -688,7 +688,7 @@ func (g *Game) Init() {
|
|||||||
// We don't actually care about the values here because the quad is hardcoded in the shader,
|
// We don't actually care about the values here because the quad is hardcoded in the shader,
|
||||||
// but we just want to have a vao with 6 vertices and uv0 so opengl can be called properly
|
// but we just want to have a vao with 6 vertices and uv0 so opengl can be called properly
|
||||||
screenQuadVbo := buffers.NewVertexBuffer(buffers.Element{ElementType: buffers.DataTypeVec3}, buffers.Element{ElementType: buffers.DataTypeVec2})
|
screenQuadVbo := buffers.NewVertexBuffer(buffers.Element{ElementType: buffers.DataTypeVec3}, buffers.Element{ElementType: buffers.DataTypeVec2})
|
||||||
screenQuadVbo.SetData(make([]float32, 6), buffers.BufUsage_Static)
|
screenQuadVbo.SetData(make([]float32, 6), buffers.BufUsage_Static_Draw)
|
||||||
screenQuadVao = buffers.NewVertexArray()
|
screenQuadVao = buffers.NewVertexArray()
|
||||||
screenQuadVao.AddVertexBuffer(screenQuadVbo)
|
screenQuadVao.AddVertexBuffer(screenQuadVbo)
|
||||||
|
|
||||||
@ -712,6 +712,7 @@ func (g *Game) initUbos() {
|
|||||||
{Id: 0, Type: buffers.DataTypeVec3},
|
{Id: 0, Type: buffers.DataTypeVec3},
|
||||||
{Id: 1, Type: buffers.DataTypeMat4},
|
{Id: 1, Type: buffers.DataTypeMat4},
|
||||||
},
|
},
|
||||||
|
buffers.BufUsage_Dynamic_Draw,
|
||||||
)
|
)
|
||||||
|
|
||||||
globalMatricesUbo.SetBindPoint(0)
|
globalMatricesUbo.SetBindPoint(0)
|
||||||
@ -760,6 +761,7 @@ func (g *Game) initUbos() {
|
|||||||
// Ambient
|
// Ambient
|
||||||
{Id: 21, Type: buffers.DataTypeVec3}, // 12 192
|
{Id: 21, Type: buffers.DataTypeVec3}, // 12 192
|
||||||
},
|
},
|
||||||
|
buffers.BufUsage_Dynamic_Draw,
|
||||||
)
|
)
|
||||||
|
|
||||||
// fmt.Printf("\n==Lights UBO (id=%d)==\nSize=%d\nFields: %+v\n\n", lightsUbo.Id, lightsUbo.Size, lightsUbo.Fields)
|
// fmt.Printf("\n==Lights UBO (id=%d)==\nSize=%d\nFields: %+v\n\n", lightsUbo.Id, lightsUbo.Size, lightsUbo.Fields)
|
||||||
|
|||||||
@ -151,7 +151,7 @@ func NewMesh(name, modelPath string, postProcessFlags asig.PostProcess) (Mesh, e
|
|||||||
indexBufData = append(indexBufData, indices...)
|
indexBufData = append(indexBufData, indices...)
|
||||||
}
|
}
|
||||||
|
|
||||||
vbo.SetData(vertexBufData, buffers.BufUsage_Static)
|
vbo.SetData(vertexBufData, buffers.BufUsage_Static_Draw)
|
||||||
ibo.SetData(indexBufData)
|
ibo.SetData(indexBufData)
|
||||||
|
|
||||||
mesh.Vao.AddVertexBuffer(vbo)
|
mesh.Vao.AddVertexBuffer(vbo)
|
||||||
|
|||||||
Reference in New Issue
Block a user