mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-11-10 04:57:26 +01:00
opengl: Refactoring: Remove theOpenGLState
This commit is contained in:
parent
09c8516545
commit
b396b4f88a
@ -27,10 +27,12 @@ func GetDriver() *Driver {
|
||||
}
|
||||
|
||||
type Driver struct {
|
||||
state openGLState
|
||||
}
|
||||
|
||||
func (d *Driver) NewImage(width, height int) (*Image, error) {
|
||||
i := &Image{
|
||||
driver: d,
|
||||
width: width,
|
||||
height: height,
|
||||
}
|
||||
@ -48,6 +50,7 @@ func (d *Driver) NewImage(width, height int) (*Image, error) {
|
||||
func (d *Driver) NewScreenFramebufferImage(width, height int) *Image {
|
||||
checkSize(width, height)
|
||||
i := &Image{
|
||||
driver: d,
|
||||
width: width,
|
||||
height: height,
|
||||
}
|
||||
@ -60,7 +63,7 @@ func (d *Driver) NewScreenFramebufferImage(width, height int) *Image {
|
||||
|
||||
// Reset resets or initializes the current OpenGL state.
|
||||
func (d *Driver) Reset() error {
|
||||
return theOpenGLState.reset()
|
||||
return d.state.reset()
|
||||
}
|
||||
|
||||
func (d *Driver) BufferSubData(vertices []float32, indices []uint16) {
|
||||
@ -68,7 +71,7 @@ func (d *Driver) BufferSubData(vertices []float32, indices []uint16) {
|
||||
}
|
||||
|
||||
func (d *Driver) UseProgram(mode graphics.CompositeMode, colorM *affine.ColorM, filter graphics.Filter) error {
|
||||
return useProgram(mode, colorM, filter)
|
||||
return d.state.useProgram(mode, colorM, filter)
|
||||
}
|
||||
|
||||
func (d *Driver) DrawElements(len int, offsetInBytes int) {
|
||||
|
@ -37,6 +37,7 @@ func checkSize(width, height int) {
|
||||
}
|
||||
|
||||
type Image struct {
|
||||
driver *Driver
|
||||
textureNative textureNative
|
||||
framebuffer *framebuffer
|
||||
width int
|
||||
@ -57,7 +58,7 @@ func (i *Image) Delete() {
|
||||
}
|
||||
|
||||
func (i *Image) SetAsDestination() {
|
||||
theOpenGLState.destination = i
|
||||
i.driver.state.destination = i
|
||||
}
|
||||
|
||||
func (i *Image) setViewport() error {
|
||||
@ -104,5 +105,5 @@ func (i *Image) TexSubImage2D(p []byte, x, y, width, height int) {
|
||||
}
|
||||
|
||||
func (i *Image) SetAsSource() {
|
||||
theOpenGLState.source = i
|
||||
i.driver.state.source = i
|
||||
}
|
||||
|
@ -136,9 +136,6 @@ type openGLState struct {
|
||||
}
|
||||
|
||||
var (
|
||||
// theOpenGLState is the OpenGL state in the current process.
|
||||
theOpenGLState openGLState
|
||||
|
||||
zeroBuffer buffer
|
||||
zeroProgram program
|
||||
)
|
||||
@ -261,12 +258,13 @@ func bufferSubData(vertices []float32, indices []uint16) {
|
||||
theContext.elementArrayBufferSubData(indices)
|
||||
}
|
||||
|
||||
func useProgram(mode graphics.CompositeMode, colorM *affine.ColorM, filter graphics.Filter) error {
|
||||
destination := theOpenGLState.destination
|
||||
// useProgram uses the program (programTexture).
|
||||
func (s *openGLState) useProgram(mode graphics.CompositeMode, colorM *affine.ColorM, filter graphics.Filter) error {
|
||||
destination := s.destination
|
||||
if destination == nil {
|
||||
panic("destination image is not set")
|
||||
}
|
||||
source := theOpenGLState.source
|
||||
source := s.source
|
||||
if source == nil {
|
||||
panic("source image is not set")
|
||||
}
|
||||
@ -278,20 +276,10 @@ func useProgram(mode graphics.CompositeMode, colorM *affine.ColorM, filter graph
|
||||
return err
|
||||
}
|
||||
proj := destination.projectionMatrix()
|
||||
dw, dh := destination.width, destination.height
|
||||
sw, sh := source.width, source.height
|
||||
dstW := destination.width
|
||||
srcW, srcH := source.width, source.height
|
||||
|
||||
theContext.blendFunc(mode)
|
||||
theOpenGLState.useProgram(proj, dw, dh, sw, sh, colorM, filter)
|
||||
|
||||
theOpenGLState.source = nil
|
||||
theOpenGLState.destination = nil
|
||||
return nil
|
||||
}
|
||||
|
||||
// useProgram uses the program (programTexture).
|
||||
func (s *openGLState) useProgram(proj []float32, dstW, dstH, srcW, srcH int, colorM *affine.ColorM, filter graphics.Filter) {
|
||||
texture := theOpenGLState.source.textureNative
|
||||
|
||||
var program program
|
||||
switch filter {
|
||||
@ -371,5 +359,9 @@ func (s *openGLState) useProgram(proj []float32, dstW, dstH, srcW, srcH int, col
|
||||
|
||||
// We don't have to call gl.ActiveTexture here: GL_TEXTURE0 is the default active texture
|
||||
// See also: https://www.opengl.org/sdk/docs/man2/xhtml/glActiveTexture.xml
|
||||
theContext.bindTexture(texture)
|
||||
theContext.bindTexture(source.textureNative)
|
||||
|
||||
s.source = nil
|
||||
s.destination = nil
|
||||
return nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user