use internal type for colors
This commit is contained in:
parent
9a9183a531
commit
90ce4409ce
@ -2,12 +2,13 @@ package dat
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
imageColor "image/color"
|
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"github.com/FooSoft/lazarus/math"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Palette struct {
|
type Palette struct {
|
||||||
Colors [256]imageColor.RGBA
|
Colors [256]math.Color3b
|
||||||
}
|
}
|
||||||
|
|
||||||
type color struct {
|
type color struct {
|
||||||
@ -24,7 +25,7 @@ func NewFromReader(reader io.Reader) (*Palette, error) {
|
|||||||
|
|
||||||
palette := new(Palette)
|
palette := new(Palette)
|
||||||
for i, color := range colors {
|
for i, color := range colors {
|
||||||
palette.Colors[i] = imageColor.RGBA{color.R, color.G, color.B, 0xff}
|
palette.Colors[i] = math.Color3b{R: color.R, G: color.G, B: color.B}
|
||||||
}
|
}
|
||||||
|
|
||||||
return palette, nil
|
return palette, nil
|
||||||
@ -34,7 +35,7 @@ func NewFromGrayscale() *Palette {
|
|||||||
palette := new(Palette)
|
palette := new(Palette)
|
||||||
for i := 0; i < 256; i++ {
|
for i := 0; i < 256; i++ {
|
||||||
value := uint8(i)
|
value := uint8(i)
|
||||||
palette.Colors[i] = imageColor.RGBA{value, value, value, 0xff}
|
palette.Colors[i] = math.Color3b{R: value, G: value, B: value}
|
||||||
}
|
}
|
||||||
|
|
||||||
return palette
|
return palette
|
||||||
|
@ -17,6 +17,12 @@ type Rect4i struct {
|
|||||||
H int
|
H int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Color3b struct {
|
||||||
|
R byte
|
||||||
|
G byte
|
||||||
|
B byte
|
||||||
|
}
|
||||||
|
|
||||||
type Color4b struct {
|
type Color4b struct {
|
||||||
R byte
|
R byte
|
||||||
G byte
|
G byte
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package platform
|
package platform
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"image/color"
|
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"github.com/FooSoft/lazarus/math"
|
"github.com/FooSoft/lazarus/math"
|
||||||
@ -13,7 +12,7 @@ type Texture struct {
|
|||||||
glTexture uint32
|
glTexture uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
func newTextureFromRgba(colors []color.RGBA, size math.Vec2i) (*Texture, error) {
|
func newTextureFromRgba(colors []math.Color4b, size math.Vec2i) (*Texture, error) {
|
||||||
var glLastTexture int32
|
var glLastTexture int32
|
||||||
gl.GetIntegerv(gl.TEXTURE_BINDING_2D, &glLastTexture)
|
gl.GetIntegerv(gl.TEXTURE_BINDING_2D, &glLastTexture)
|
||||||
|
|
||||||
@ -29,6 +28,23 @@ func newTextureFromRgba(colors []color.RGBA, size math.Vec2i) (*Texture, error)
|
|||||||
return &Texture{size, glTexture}, nil
|
return &Texture{size, glTexture}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func newTextureFromRgb(colors []math.Color3b, size math.Vec2i) (*Texture, error) {
|
||||||
|
var glLastTexture int32
|
||||||
|
gl.GetIntegerv(gl.TEXTURE_BINDING_2D, &glLastTexture)
|
||||||
|
|
||||||
|
var glTexture uint32
|
||||||
|
gl.GenTextures(1, &glTexture)
|
||||||
|
gl.BindTexture(gl.TEXTURE_2D, glTexture)
|
||||||
|
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
|
||||||
|
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
|
||||||
|
gl.PixelStorei(gl.UNPACK_ROW_LENGTH, 0)
|
||||||
|
gl.PixelStorei(gl.UNPACK_ALIGNMENT, 1)
|
||||||
|
gl.TexImage2D(gl.TEXTURE_2D, 0, gl.RGB, int32(size.X), int32(size.Y), 0, gl.RGB, gl.UNSIGNED_BYTE, unsafe.Pointer(&colors[0]))
|
||||||
|
|
||||||
|
gl.BindTexture(gl.TEXTURE_2D, uint32(glLastTexture))
|
||||||
|
return &Texture{size, glTexture}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (t *Texture) Handle() Handle {
|
func (t *Texture) Handle() Handle {
|
||||||
return Handle(t.glTexture)
|
return Handle(t.glTexture)
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
package platform
|
package platform
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"image/color"
|
|
||||||
|
|
||||||
imgui "github.com/FooSoft/imgui-go"
|
imgui "github.com/FooSoft/imgui-go"
|
||||||
"github.com/FooSoft/lazarus/math"
|
"github.com/FooSoft/lazarus/math"
|
||||||
"github.com/FooSoft/lazarus/platform/imgui_backend"
|
"github.com/FooSoft/lazarus/platform/imgui_backend"
|
||||||
@ -69,10 +67,14 @@ func (w *Window) Destroy() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *Window) CreateTextureRgba(colors []color.RGBA, size math.Vec2i) (*Texture, error) {
|
func (w *Window) CreateTextureRgba(colors []math.Color4b, size math.Vec2i) (*Texture, error) {
|
||||||
return newTextureFromRgba(colors, size)
|
return newTextureFromRgba(colors, size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (w *Window) CreateTextureRgb(colors []math.Color3b, size math.Vec2i) (*Texture, error) {
|
||||||
|
return newTextureFromRgb(colors, size)
|
||||||
|
}
|
||||||
|
|
||||||
func (w *Window) RenderTexture(texture *Texture, position math.Vec2i) {
|
func (w *Window) RenderTexture(texture *Texture, position math.Vec2i) {
|
||||||
size := texture.Size()
|
size := texture.Size()
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"image"
|
"image"
|
||||||
|
"image/color"
|
||||||
"image/png"
|
"image/png"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
@ -39,10 +40,12 @@ func extractSprite(spritePath string, palette *dat.Palette, targetDir string) er
|
|||||||
|
|
||||||
for di, direction := range sprite.Directions {
|
for di, direction := range sprite.Directions {
|
||||||
for fi, frame := range direction.Frames {
|
for fi, frame := range direction.Frames {
|
||||||
img := image.NewRGBA(image.Rect(0, 0, frame.Width, frame.Height))
|
img := image.NewRGBA(image.Rect(0, 0, frame.Size.X, frame.Size.Y))
|
||||||
for y := 0; y < frame.Height; y++ {
|
for y := 0; y < frame.Size.Y; y++ {
|
||||||
for x := 0; x < frame.Width; x++ {
|
for x := 0; x < frame.Size.X; x++ {
|
||||||
img.Set(x, y, palette.Colors[frame.Data[y*frame.Width+x]])
|
colorSrc := palette.Colors[frame.Data[y*frame.Size.X+x]]
|
||||||
|
colorDst := color.RGBA{colorSrc.R, colorSrc.G, colorSrc.B, 0xff}
|
||||||
|
img.Set(x, y, colorDst)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ package main
|
|||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"image/color"
|
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -11,6 +10,7 @@ import (
|
|||||||
imgui "github.com/FooSoft/imgui-go"
|
imgui "github.com/FooSoft/imgui-go"
|
||||||
"github.com/FooSoft/lazarus/formats/dat"
|
"github.com/FooSoft/lazarus/formats/dat"
|
||||||
"github.com/FooSoft/lazarus/formats/dc6"
|
"github.com/FooSoft/lazarus/formats/dc6"
|
||||||
|
"github.com/FooSoft/lazarus/math"
|
||||||
"github.com/FooSoft/lazarus/platform"
|
"github.com/FooSoft/lazarus/platform"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ func (s *scene) Advance(window *platform.Window) error {
|
|||||||
|
|
||||||
func (s *scene) updateTexture(window *platform.Window) error {
|
func (s *scene) updateTexture(window *platform.Window) error {
|
||||||
frame := s.sprite.Directions[s.directionIndex].Frames[s.frameIndex]
|
frame := s.sprite.Directions[s.directionIndex].Frames[s.frameIndex]
|
||||||
colors := make([]color.RGBA, frame.Size.X*frame.Size.Y)
|
colors := make([]math.Color3b, frame.Size.X*frame.Size.Y)
|
||||||
for y := 0; y < frame.Size.Y; y++ {
|
for y := 0; y < frame.Size.Y; y++ {
|
||||||
for x := 0; x < frame.Size.X; x++ {
|
for x := 0; x < frame.Size.X; x++ {
|
||||||
colors[y*frame.Size.X+x] = s.palette.Colors[frame.Data[y*frame.Size.X+x]]
|
colors[y*frame.Size.X+x] = s.palette.Colors[frame.Data[y*frame.Size.X+x]]
|
||||||
@ -103,7 +103,7 @@ func (s *scene) updateTexture(window *platform.Window) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
s.texture, err = window.CreateTextureRgba(colors, frame.Size)
|
s.texture, err = window.CreateTextureRgb(colors, frame.Size)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user