mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-26 03:38:55 +01:00
graphics: Add comments
This commit is contained in:
parent
8e75964cb1
commit
ecc9d0b3b1
16
internal/graphics/doc.go
Normal file
16
internal/graphics/doc.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Copyright 2017 The Ebiten Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
// Package graphics represents a low layer for graphics using OpenGL.
|
||||||
|
package graphics
|
@ -21,6 +21,7 @@ import (
|
|||||||
"github.com/hajimehoshi/ebiten/internal/opengl"
|
"github.com/hajimehoshi/ebiten/internal/opengl"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// arrayBufferLayoutPart is a part of an array buffer layout.
|
||||||
type arrayBufferLayoutPart struct {
|
type arrayBufferLayoutPart struct {
|
||||||
// TODO: This struct should belong to a program and know it.
|
// TODO: This struct should belong to a program and know it.
|
||||||
name string
|
name string
|
||||||
@ -29,11 +30,16 @@ type arrayBufferLayoutPart struct {
|
|||||||
normalize bool
|
normalize bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// arrayBufferLayout is an array buffer layout.
|
||||||
|
//
|
||||||
|
// An array buffer in OpenGL is a buffer representing vertices and
|
||||||
|
// is passed to a vertex shader.
|
||||||
type arrayBufferLayout struct {
|
type arrayBufferLayout struct {
|
||||||
parts []arrayBufferLayoutPart
|
parts []arrayBufferLayoutPart
|
||||||
total int
|
total int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// totalBytes returns the size in bytes for one element of the array buffer.
|
||||||
func (a *arrayBufferLayout) totalBytes() int {
|
func (a *arrayBufferLayout) totalBytes() int {
|
||||||
if a.total != 0 {
|
if a.total != 0 {
|
||||||
return a.total
|
return a.total
|
||||||
@ -46,10 +52,12 @@ func (a *arrayBufferLayout) totalBytes() int {
|
|||||||
return a.total
|
return a.total
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// newArrayBuffer creates OpenGL's buffer object for the array buffer.
|
||||||
func (a *arrayBufferLayout) newArrayBuffer() opengl.Buffer {
|
func (a *arrayBufferLayout) newArrayBuffer() opengl.Buffer {
|
||||||
return opengl.GetContext().NewArrayBuffer(a.totalBytes() * 4 * maxQuads)
|
return opengl.GetContext().NewArrayBuffer(a.totalBytes() * 4 * maxQuads)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// enable binds the array buffer the given program to use the array buffer.
|
||||||
func (a *arrayBufferLayout) enable(program opengl.Program) {
|
func (a *arrayBufferLayout) enable(program opengl.Program) {
|
||||||
for _, p := range a.parts {
|
for _, p := range a.parts {
|
||||||
opengl.GetContext().EnableVertexAttribArray(program, p.name)
|
opengl.GetContext().EnableVertexAttribArray(program, p.name)
|
||||||
@ -62,6 +70,7 @@ func (a *arrayBufferLayout) enable(program opengl.Program) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// disable stops using the array buffer.
|
||||||
func (a *arrayBufferLayout) disable(program opengl.Program) {
|
func (a *arrayBufferLayout) disable(program opengl.Program) {
|
||||||
// TODO: Disabling should be done in reversed order?
|
// TODO: Disabling should be done in reversed order?
|
||||||
for _, p := range a.parts {
|
for _, p := range a.parts {
|
||||||
@ -70,6 +79,7 @@ func (a *arrayBufferLayout) disable(program opengl.Program) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
// theArrayBufferLayout is the array buffer layout for Ebiten.
|
||||||
theArrayBufferLayout = arrayBufferLayout{
|
theArrayBufferLayout = arrayBufferLayout{
|
||||||
// Note that GL_MAX_VERTEX_ATTRIBS is at least 16.
|
// Note that GL_MAX_VERTEX_ATTRIBS is at least 16.
|
||||||
parts: []arrayBufferLayoutPart{
|
parts: []arrayBufferLayoutPart{
|
||||||
@ -101,10 +111,16 @@ var (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// openGLState is a state for OpenGL.
|
||||||
type openGLState struct {
|
type openGLState struct {
|
||||||
arrayBuffer opengl.Buffer
|
// arrayBuffer is OpenGL's array buffer (vertices data).
|
||||||
indexBufferQuads opengl.Buffer
|
arrayBuffer opengl.Buffer
|
||||||
programTexture opengl.Program
|
|
||||||
|
// elementArrayBuffer is OpenGL's element array buffer (indices data).
|
||||||
|
elementArrayBuffer opengl.Buffer
|
||||||
|
|
||||||
|
// programTexture is OpenGL's program for rendering a texture.
|
||||||
|
programTexture opengl.Program
|
||||||
|
|
||||||
lastProgram opengl.Program
|
lastProgram opengl.Program
|
||||||
lastProjectionMatrix []float32
|
lastProjectionMatrix []float32
|
||||||
@ -113,11 +129,10 @@ type openGLState struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
// theOpenGLState is the OpenGL state in the current process.
|
||||||
theOpenGLState openGLState
|
theOpenGLState openGLState
|
||||||
|
|
||||||
zeroBuffer opengl.Buffer
|
|
||||||
zeroProgram opengl.Program
|
zeroProgram opengl.Program
|
||||||
zeroTexture opengl.Texture
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -125,10 +140,12 @@ const (
|
|||||||
maxQuads = indicesNum / 6
|
maxQuads = indicesNum / 6
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ResetGLState resets or initializes the current OpenGL state.
|
||||||
func ResetGLState() error {
|
func ResetGLState() error {
|
||||||
return theOpenGLState.reset()
|
return theOpenGLState.reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reset resets or initializes the OpenGL state.
|
||||||
func (s *openGLState) reset() error {
|
func (s *openGLState) reset() error {
|
||||||
if err := opengl.GetContext().Reset(); err != nil {
|
if err := opengl.GetContext().Reset(); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -158,6 +175,8 @@ func (s *openGLState) reset() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Delete the array buffer and the element array buffer when needed?
|
||||||
|
|
||||||
s.arrayBuffer = theArrayBufferLayout.newArrayBuffer()
|
s.arrayBuffer = theArrayBufferLayout.newArrayBuffer()
|
||||||
|
|
||||||
indices := make([]uint16, 6*maxQuads)
|
indices := make([]uint16, 6*maxQuads)
|
||||||
@ -169,7 +188,7 @@ func (s *openGLState) reset() error {
|
|||||||
indices[6*i+4] = 4*i + 2
|
indices[6*i+4] = 4*i + 2
|
||||||
indices[6*i+5] = 4*i + 3
|
indices[6*i+5] = 4*i + 3
|
||||||
}
|
}
|
||||||
s.indexBufferQuads = opengl.GetContext().NewElementArrayBuffer(indices)
|
s.elementArrayBuffer = opengl.GetContext().NewElementArrayBuffer(indices)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -207,7 +226,7 @@ func (p *programContext) begin() error {
|
|||||||
p.state.lastProjectionMatrix = nil
|
p.state.lastProjectionMatrix = nil
|
||||||
p.state.lastColorMatrix = nil
|
p.state.lastColorMatrix = nil
|
||||||
p.state.lastColorMatrixTranslation = nil
|
p.state.lastColorMatrixTranslation = nil
|
||||||
c.BindElementArrayBuffer(p.state.indexBufferQuads)
|
c.BindElementArrayBuffer(p.state.elementArrayBuffer)
|
||||||
c.UniformInt(p.program, "texture", 0)
|
c.UniformInt(p.program, "texture", 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ import (
|
|||||||
"github.com/hajimehoshi/ebiten/internal/opengl"
|
"github.com/hajimehoshi/ebiten/internal/opengl"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// texture represents OpenGL's texture.
|
||||||
type texture struct {
|
type texture struct {
|
||||||
native opengl.Texture
|
native opengl.Texture
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user