Add api and example for mesh drawing.
This commit is contained in:
parent
ace572fead
commit
15ed58856b
7 changed files with 510 additions and 18 deletions
|
@ -400,6 +400,16 @@ func DrawBillboardRec(camera Camera, texture Texture2D, sourceRec Rectangle, cen
|
|||
C.DrawBillboardRec(*ccamera, *ctexture, *csourceRec, *ccenter, *csize, *ctint)
|
||||
}
|
||||
|
||||
// DrawMesh - Draw a single mesh
|
||||
func DrawMesh(mesh Mesh, material Material, transform Matrix) {
|
||||
C.DrawMesh(*mesh.cptr(), *material.cptr(), *transform.cptr())
|
||||
}
|
||||
|
||||
// DrawMeshInstanced - Draw mesh with instanced rendering
|
||||
func DrawMeshInstanced(mesh Mesh, material Material, transforms []Matrix, instances int) {
|
||||
C.DrawMeshInstanced(*mesh.cptr(), *material.cptr(), transforms[0].cptr(), C.int(instances))
|
||||
}
|
||||
|
||||
// GetMeshBoundingBox - Compute mesh bounding box limits
|
||||
func GetMeshBoundingBox(mesh Mesh) BoundingBox {
|
||||
cmesh := mesh.cptr()
|
||||
|
|
|
@ -716,8 +716,10 @@ const (
|
|||
)
|
||||
|
||||
// Shader location point type
|
||||
type LocationPointType int32
|
||||
|
||||
const (
|
||||
LocVertexPosition = iota
|
||||
LocVertexPosition LocationPointType = iota
|
||||
LocVertexTexcoord01
|
||||
LocVertexTexcoord02
|
||||
LocVertexNormal
|
||||
|
@ -746,8 +748,10 @@ const (
|
|||
)
|
||||
|
||||
// Material map type
|
||||
type MaterialMapType int32
|
||||
|
||||
const (
|
||||
MapAlbedo = iota
|
||||
MapAlbedo MaterialMapType = iota
|
||||
MapMetalness
|
||||
MapNormal
|
||||
MapRoughness
|
||||
|
@ -830,6 +834,11 @@ func newMaterialFromPointer(ptr unsafe.Pointer) Material {
|
|||
return *(*Material)(ptr)
|
||||
}
|
||||
|
||||
// GetMap - Get pointer to MaterialMap by map type
|
||||
func (mt Material) GetMap(index MaterialMapType) *MaterialMap {
|
||||
return (*MaterialMap)(unsafe.Pointer(uintptr(unsafe.Pointer(mt.Maps)) + uintptr(index)*uintptr(unsafe.Sizeof(MaterialMap{}))))
|
||||
}
|
||||
|
||||
// MaterialMap type
|
||||
type MaterialMap struct {
|
||||
// Texture
|
||||
|
@ -920,6 +929,16 @@ func newShaderFromPointer(ptr unsafe.Pointer) Shader {
|
|||
return *(*Shader)(ptr)
|
||||
}
|
||||
|
||||
// GetLocation - Get shader value's location
|
||||
func (sh Shader) GetLocation(index LocationPointType) int32 {
|
||||
return *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(sh.Locs)) + uintptr(index*4)))
|
||||
}
|
||||
|
||||
// UpdateLocation - Update shader value's location
|
||||
func (sh Shader) UpdateLocation(index LocationPointType, loc int32) {
|
||||
*(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(sh.Locs)) + uintptr(index*4))) = loc
|
||||
}
|
||||
|
||||
// CharInfo - Font character info
|
||||
type CharInfo struct {
|
||||
// Character value (Unicode)
|
||||
|
|
|
@ -673,22 +673,22 @@ func MatrixScale(x, y, z float32) Matrix {
|
|||
func MatrixMultiply(left, right Matrix) Matrix {
|
||||
var result Matrix
|
||||
|
||||
result.M0 = right.M0*left.M0 + right.M1*left.M4 + right.M2*left.M8 + right.M3*left.M12
|
||||
result.M1 = right.M0*left.M1 + right.M1*left.M5 + right.M2*left.M9 + right.M3*left.M13
|
||||
result.M2 = right.M0*left.M2 + right.M1*left.M6 + right.M2*left.M10 + right.M3*left.M14
|
||||
result.M3 = right.M0*left.M3 + right.M1*left.M7 + right.M2*left.M11 + right.M3*left.M15
|
||||
result.M4 = right.M4*left.M0 + right.M5*left.M4 + right.M6*left.M8 + right.M7*left.M12
|
||||
result.M5 = right.M4*left.M1 + right.M5*left.M5 + right.M6*left.M9 + right.M7*left.M13
|
||||
result.M6 = right.M4*left.M2 + right.M5*left.M6 + right.M6*left.M10 + right.M7*left.M14
|
||||
result.M7 = right.M4*left.M3 + right.M5*left.M7 + right.M6*left.M11 + right.M7*left.M15
|
||||
result.M8 = right.M8*left.M0 + right.M9*left.M4 + right.M10*left.M8 + right.M11*left.M12
|
||||
result.M9 = right.M8*left.M1 + right.M9*left.M5 + right.M10*left.M9 + right.M11*left.M13
|
||||
result.M10 = right.M8*left.M2 + right.M9*left.M6 + right.M10*left.M10 + right.M11*left.M14
|
||||
result.M11 = right.M8*left.M3 + right.M9*left.M7 + right.M10*left.M11 + right.M11*left.M15
|
||||
result.M12 = right.M12*left.M0 + right.M13*left.M4 + right.M14*left.M8 + right.M15*left.M12
|
||||
result.M13 = right.M12*left.M1 + right.M13*left.M5 + right.M14*left.M9 + right.M15*left.M13
|
||||
result.M14 = right.M12*left.M2 + right.M13*left.M6 + right.M14*left.M10 + right.M15*left.M14
|
||||
result.M15 = right.M12*left.M3 + right.M13*left.M7 + right.M14*left.M11 + right.M15*left.M15
|
||||
result.M0 = left.M0*right.M0 + left.M1*right.M4 + left.M2*right.M8 + left.M3*right.M12
|
||||
result.M1 = left.M0*right.M1 + left.M1*right.M5 + left.M2*right.M9 + left.M3*right.M13
|
||||
result.M2 = left.M0*right.M2 + left.M1*right.M6 + left.M2*right.M10 + left.M3*right.M14
|
||||
result.M3 = left.M0*right.M3 + left.M1*right.M7 + left.M2*right.M11 + left.M3*right.M15
|
||||
result.M4 = left.M4*right.M0 + left.M5*right.M4 + left.M6*right.M8 + left.M7*right.M12
|
||||
result.M5 = left.M4*right.M1 + left.M5*right.M5 + left.M6*right.M9 + left.M7*right.M13
|
||||
result.M6 = left.M4*right.M2 + left.M5*right.M6 + left.M6*right.M10 + left.M7*right.M14
|
||||
result.M7 = left.M4*right.M3 + left.M5*right.M7 + left.M6*right.M11 + left.M7*right.M15
|
||||
result.M8 = left.M8*right.M0 + left.M9*right.M4 + left.M10*right.M8 + left.M11*right.M12
|
||||
result.M9 = left.M8*right.M1 + left.M9*right.M5 + left.M10*right.M9 + left.M11*right.M13
|
||||
result.M10 = left.M8*right.M2 + left.M9*right.M6 + left.M10*right.M10 + left.M11*right.M14
|
||||
result.M11 = left.M8*right.M3 + left.M9*right.M7 + left.M10*right.M11 + left.M11*right.M15
|
||||
result.M12 = left.M12*right.M0 + left.M13*right.M4 + left.M14*right.M8 + left.M15*right.M12
|
||||
result.M13 = left.M12*right.M1 + left.M13*right.M5 + left.M14*right.M9 + left.M15*right.M13
|
||||
result.M14 = left.M12*right.M2 + left.M13*right.M6 + left.M14*right.M10 + left.M15*right.M14
|
||||
result.M15 = left.M12*right.M3 + left.M13*right.M7 + left.M14*right.M11 + left.M15*right.M15
|
||||
|
||||
return result
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue