Skip to content

Commit c7db75a

Browse files
authored
Merge pull request #1 from essial/main
Added basic rendering functionality.
2 parents e2d2dc2 + ba8dddc commit c7db75a

File tree

4 files changed

+95
-6
lines changed

4 files changed

+95
-6
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@ require (
77
github.com/sirupsen/logrus v1.7.0
88
github.com/veandco/go-sdl2 v0.4.5
99
go.uber.org/fx v1.13.1
10+
golang.org/x/tools v0.0.0-20191114200427-caa0b0f7d508
1011
)

internal/engine/backends/graphicsbackend/interface.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ type Interface interface {
99
GetVSyncEnabled() bool
1010
GetCursorPos() (int, int)
1111
CurrentFPS() float64
12-
// NewSurface(width, height int) Surface
12+
NewSurface(width, height int, pixelData *[]byte) (Surface, error)
1313
Render() error
1414
}
15+
16+
type Surface interface {
17+
RenderTo(surface Surface) error
18+
}

internal/engine/backends/graphicsbackend/sdl2graphicsbackend/graphicsbackend.go

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package sdl2graphicsbackend
33
import (
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

89
const (
@@ -11,6 +12,7 @@ const (
1112
)
1213

1314
var _ graphicsbackend.Interface = &SDL2GraphicsBackend{}
15+
var _ graphicsbackend.Surface = &SDL2GraphicsBackend{}
1416

1517
type 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) {
86100
func (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+
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package sdl2graphicsbackend
2+
3+
import (
4+
"github.com/OpenDiablo2/AbyssEngine/internal/engine/backends/graphicsbackend"
5+
"github.com/veandco/go-sdl2/sdl"
6+
)
7+
8+
var _ graphicsbackend.Surface = &SDL2Surface{}
9+
10+
type SDL2Surface struct {
11+
texture *sdl.Texture
12+
width, height int32
13+
renderer *sdl.Renderer
14+
}
15+
16+
func CreateSDL2Surface(renderer *sdl.Renderer, texture *sdl.Texture, width, height int32) *SDL2Surface {
17+
result := &SDL2Surface{
18+
renderer: renderer,
19+
texture: texture,
20+
width: width,
21+
height: height,
22+
}
23+
24+
return result
25+
}
26+
27+
func (s SDL2Surface) RenderTo(targetSurface graphicsbackend.Surface) error {
28+
sdlTargetSurface := targetSurface.(*SDL2Surface)
29+
30+
destRect := &sdl.Rect{
31+
W: s.width, H: s.height,
32+
}
33+
34+
if err := s.renderer.SetRenderTarget(sdlTargetSurface.texture); err != nil {
35+
return err
36+
}
37+
38+
if err := s.renderer.Copy(s.texture, nil, destRect); err != nil {
39+
return err
40+
}
41+
42+
if err := s.renderer.SetRenderTarget(nil); err != nil {
43+
return err
44+
}
45+
46+
return nil
47+
}

0 commit comments

Comments
 (0)