@@ -3,6 +3,7 @@ package sdl2graphicsbackend
33import (
44 "github.com/OpenDiablo2/AbyssEngine/internal/engine/backends/graphicsbackend"
55 "github.com/veandco/go-sdl2/sdl"
6+ "golang.org/x/tools/go/ssa/interp/testdata/src/errors"
67)
78
89const (
@@ -11,6 +12,7 @@ const (
1112)
1213
1314var _ graphicsbackend.Interface = & SDL2GraphicsBackend {}
15+ var _ graphicsbackend.Surface = & SDL2GraphicsBackend {}
1416
1517type SDL2GraphicsBackend struct {
1618 window * sdl.Window
@@ -32,19 +34,31 @@ func Create() (*SDL2GraphicsBackend, error) {
3234 return nil , err
3335 }
3436
35- window , err := sdl .CreateWindow ("OpenDiablo 2" , sdl .WINDOWPOS_UNDEFINED , sdl .WINDOWPOS_UNDEFINED , 640 , 480 , sdl .WINDOW_SHOWN | sdl .WINDOW_RESIZABLE | sdl .WINDOW_INPUT_FOCUS )
37+ window , err := sdl .CreateWindow ("OpenDiablo 2" , sdl .WINDOWPOS_UNDEFINED , sdl .WINDOWPOS_UNDEFINED ,
38+ 640 , 480 , sdl .WINDOW_SHOWN | sdl .WINDOW_RESIZABLE | sdl .WINDOW_INPUT_FOCUS )
39+
3640 if err != nil {
3741 return nil , err
3842 }
3943
40- r , err := sdl .CreateRenderer (window , - 1 , sdl .RENDERER_ACCELERATED | sdl .RENDERER_TARGETTEXTURE | sdl .RENDERER_PRESENTVSYNC )
44+ r , err := sdl .CreateRenderer (window , - 1 ,
45+ sdl .RENDERER_ACCELERATED | sdl .RENDERER_TARGETTEXTURE | sdl .RENDERER_PRESENTVSYNC )
46+
4147 if err != nil {
4248 return nil , err
4349 }
4450
45- r .SetDrawBlendMode (sdl .BLENDMODE_BLEND )
46- r .SetIntegerScale (false )
47- r .SetLogicalSize (800 , 600 )
51+ if err := r .SetDrawBlendMode (sdl .BLENDMODE_BLEND ); err != nil {
52+ return nil , err
53+ }
54+
55+ if err := r .SetIntegerScale (false ); err != nil {
56+ return nil , err
57+ }
58+
59+ if err := r .SetLogicalSize (800 , 600 ); err != nil {
60+ return nil , err
61+ }
4862 window .SetMinimumSize (800 , 600 )
4963
5064 result := & SDL2GraphicsBackend {
@@ -86,3 +100,26 @@ func (r *SDL2GraphicsBackend) GetCursorPos() (int, int) {
86100func (r * SDL2GraphicsBackend ) CurrentFPS () float64 {
87101 panic ("implement me" )
88102}
103+
104+ func (r * SDL2GraphicsBackend ) NewSurface (width , height int , pixelData * []byte ) (graphicsbackend.Surface , error ) {
105+ var texture * sdl.Texture
106+ var err error
107+
108+ if texture , err = r .renderer .CreateTexture (sdl .PIXELFORMAT_ARGB8888 , sdl .TEXTUREACCESS_TARGET ,
109+ int32 (width ), int32 (height )); err != nil {
110+ return nil , err
111+ }
112+
113+ if err = texture .Update (nil , * pixelData , width * 4 ); err != nil {
114+ return nil , err
115+ }
116+
117+ result := CreateSDL2Surface (r .renderer , texture , int32 (width ), int32 (height ))
118+
119+ return result , nil
120+ }
121+
122+ func (r * SDL2GraphicsBackend ) RenderTo (graphicsbackend.Surface ) error {
123+ return errors .New ("cannot render the output surface to another surface" )
124+ }
125+
0 commit comments