Adding modding folder with a hacked build.
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
package graphics
|
||||
|
||||
import "github.com/inkyblackness/hacked/ui/opengl"
|
||||
|
||||
// BitmapTexture wraps an OpenGL handle for a downloaded image.
|
||||
type BitmapTexture struct {
|
||||
gl opengl.OpenGL
|
||||
handle uint32
|
||||
|
||||
width, height float32
|
||||
u, v float32
|
||||
|
||||
pixelData []byte
|
||||
}
|
||||
|
||||
func powerOfTwo(value int) int {
|
||||
result := 2
|
||||
|
||||
for (result < value) && (result < 0x1000) {
|
||||
result *= 2
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// NewBitmapTexture downloads the provided raw data to OpenGL and returns a BitmapTexture instance.
|
||||
func NewBitmapTexture(gl opengl.OpenGL, width, height int, pixelData []byte) *BitmapTexture {
|
||||
textureWidth := powerOfTwo(width)
|
||||
textureHeight := powerOfTwo(height)
|
||||
tex := &BitmapTexture{
|
||||
gl: gl,
|
||||
handle: gl.GenTextures(1)[0],
|
||||
|
||||
width: float32(width),
|
||||
height: float32(height),
|
||||
|
||||
pixelData: pixelData,
|
||||
}
|
||||
tex.u = tex.width / float32(textureWidth)
|
||||
tex.v = tex.height / float32(textureHeight)
|
||||
|
||||
paddedData := make([]byte, textureWidth*textureHeight)
|
||||
for y := 0; y < height; y++ {
|
||||
inStart := y * width
|
||||
outOffset := y * textureWidth
|
||||
for x := 0; x < width; x++ {
|
||||
value := pixelData[inStart+x]
|
||||
paddedData[outOffset] = value
|
||||
outOffset++
|
||||
}
|
||||
}
|
||||
|
||||
gl.BindTexture(opengl.TEXTURE_2D, tex.handle)
|
||||
gl.TexImage2D(opengl.TEXTURE_2D, 0, opengl.RED, int32(textureWidth), int32(textureHeight),
|
||||
0, opengl.RED, opengl.UNSIGNED_BYTE, paddedData)
|
||||
gl.TexParameteri(opengl.TEXTURE_2D, opengl.TEXTURE_MAG_FILTER, opengl.NEAREST)
|
||||
gl.TexParameteri(opengl.TEXTURE_2D, opengl.TEXTURE_MIN_FILTER, opengl.NEAREST)
|
||||
gl.GenerateMipmap(opengl.TEXTURE_2D)
|
||||
gl.BindTexture(opengl.TEXTURE_2D, 0)
|
||||
|
||||
return tex
|
||||
}
|
||||
|
||||
// Dispose releases the OpenGL texture.
|
||||
func (tex *BitmapTexture) Dispose() {
|
||||
if tex.handle != 0 {
|
||||
tex.gl.DeleteTextures([]uint32{tex.handle})
|
||||
tex.handle = 0
|
||||
}
|
||||
}
|
||||
|
||||
// Handle returns the texture handle.
|
||||
func (tex *BitmapTexture) Handle() uint32 {
|
||||
return tex.handle
|
||||
}
|
||||
|
||||
// PixelData returns the original paletted pixel data.
|
||||
func (tex *BitmapTexture) PixelData() []byte {
|
||||
return tex.pixelData
|
||||
}
|
||||
|
||||
// Size returns the dimensions of the bitmap, in pixels.
|
||||
func (tex *BitmapTexture) Size() (width, height float32) {
|
||||
return tex.width, tex.height
|
||||
}
|
||||
|
||||
// UV returns the maximum U and V values for the bitmap. The bitmap will be
|
||||
// stored in a power-of-two texture, which may be larger than the bitmap.
|
||||
func (tex *BitmapTexture) UV() (u, v float32) {
|
||||
return tex.u, tex.v
|
||||
}
|
||||
Reference in New Issue
Block a user