mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-25 03:08:54 +01:00
opengl: Avoid using encoding/binary for speed
This commit is contained in:
parent
e8a3e04535
commit
2d78d14e83
@ -17,8 +17,6 @@
|
|||||||
package opengl
|
package opengl
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"encoding/binary"
|
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
@ -294,24 +292,36 @@ func (c *Context) DisableVertexAttribArray(p Program, location string) {
|
|||||||
gl.DisableVertexAttribArray(mgl.Attrib(l))
|
gl.DisableVertexAttribArray(mgl.Attrib(l))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func uint16ToBytes(v []uint16) []byte {
|
||||||
|
b := make([]byte, len(v) * 2)
|
||||||
|
for i, x := range v {
|
||||||
|
b[2*i] = byte(x)
|
||||||
|
b[2*i+1] = byte(x >> 8)
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func int16ToBytes(v []int16) []byte {
|
||||||
|
b := make([]byte, len(v) * 2)
|
||||||
|
for i, x := range v {
|
||||||
|
b[2*i] = byte(uint16(x))
|
||||||
|
b[2*i+1] = byte(uint16(x) >> 8)
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Context) NewBuffer(bufferType BufferType, v interface{}, bufferUsage BufferUsage) Buffer {
|
func (c *Context) NewBuffer(bufferType BufferType, v interface{}, bufferUsage BufferUsage) Buffer {
|
||||||
b := gl.CreateBuffer()
|
b := gl.CreateBuffer()
|
||||||
gl.BindBuffer(mgl.Enum(bufferType), b)
|
gl.BindBuffer(mgl.Enum(bufferType), b)
|
||||||
//var bb []byte
|
|
||||||
switch v := v.(type) {
|
switch v := v.(type) {
|
||||||
case int:
|
case int:
|
||||||
gl.BufferInit(mgl.Enum(bufferType), v, mgl.Enum(bufferUsage))
|
gl.BufferInit(mgl.Enum(bufferType), v, mgl.Enum(bufferUsage))
|
||||||
return Buffer(b)
|
return Buffer(b)
|
||||||
case []uint16:
|
case []uint16:
|
||||||
case []float32:
|
gl.BufferData(mgl.Enum(bufferType), uint16ToBytes(v), mgl.Enum(bufferUsage))
|
||||||
default:
|
default:
|
||||||
panic("not reach")
|
panic("not reach")
|
||||||
}
|
}
|
||||||
bt := &bytes.Buffer{}
|
|
||||||
if err := binary.Write(bt, binary.LittleEndian, v); err != nil {
|
|
||||||
panic(fmt.Sprintf("opengl: Binary error: %v", err))
|
|
||||||
}
|
|
||||||
gl.BufferData(mgl.Enum(bufferType), bt.Bytes(), mgl.Enum(bufferUsage))
|
|
||||||
return Buffer(b)
|
return Buffer(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,11 +330,7 @@ func (c *Context) BindElementArrayBuffer(b Buffer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Context) BufferSubData(bufferType BufferType, data []int16) {
|
func (c *Context) BufferSubData(bufferType BufferType, data []int16) {
|
||||||
bt := &bytes.Buffer{}
|
gl.BufferSubData(mgl.Enum(bufferType), 0, int16ToBytes(data))
|
||||||
if err := binary.Write(bt, binary.LittleEndian, data); err != nil {
|
|
||||||
panic(fmt.Sprintf("opengl: Binary error: %v", err))
|
|
||||||
}
|
|
||||||
gl.BufferSubData(mgl.Enum(bufferType), 0, bt.Bytes())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Context) DrawElements(mode Mode, len int) {
|
func (c *Context) DrawElements(mode Mode, len int) {
|
||||||
|
Loading…
Reference in New Issue
Block a user