mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2024-12-24 18:58:54 +01:00
image: Remove drawing lines and rects (#142)
This commit is contained in:
parent
1e738f6a10
commit
38552f8d9d
@ -81,82 +81,3 @@ func drawTexture(c *opengl.Context, texture opengl.Texture, projectionMatrix *[4
|
||||
c.DrawElements(c.Triangles, 6*num)
|
||||
return nil
|
||||
}
|
||||
|
||||
func drawLines(c *opengl.Context, projectionMatrix *[4][4]float64, lines Lines) error {
|
||||
if !shadersInitialized {
|
||||
if err := initialize(c); err != nil {
|
||||
return err
|
||||
}
|
||||
shadersInitialized = true
|
||||
}
|
||||
|
||||
if lines.Len() == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
f := useProgramForLines(c, glMatrix(projectionMatrix))
|
||||
defer f.FinishProgram()
|
||||
|
||||
vertices := vertices[0:0]
|
||||
num := 0
|
||||
for i := 0; i < lines.Len(); i++ {
|
||||
x0, y0, x1, y1 := lines.Points(i)
|
||||
if x0 == x1 && y0 == y1 {
|
||||
continue
|
||||
}
|
||||
r, g, b, a := lines.Color(i).RGBA()
|
||||
vertices = append(vertices,
|
||||
int16(x0), int16(y0), int16(r), int16(g), int16(b), int16(a),
|
||||
int16(x1), int16(y1), int16(r), int16(g), int16(b), int16(a),
|
||||
)
|
||||
num++
|
||||
}
|
||||
if len(vertices) == 0 {
|
||||
return nil
|
||||
}
|
||||
c.BufferSubData(c.ArrayBuffer, vertices)
|
||||
c.DrawElements(c.Lines, 2*num)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func drawFilledRects(c *opengl.Context, projectionMatrix *[4][4]float64, rects Rects) error {
|
||||
if !shadersInitialized {
|
||||
if err := initialize(c); err != nil {
|
||||
return err
|
||||
}
|
||||
shadersInitialized = true
|
||||
}
|
||||
|
||||
if rects.Len() == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
f := useProgramForRects(c, glMatrix(projectionMatrix))
|
||||
defer f.FinishProgram()
|
||||
|
||||
vertices := vertices[0:0]
|
||||
num := 0
|
||||
for i := 0; i < rects.Len(); i++ {
|
||||
x, y, w, h := rects.Rect(i)
|
||||
if w == 0 || h == 0 {
|
||||
continue
|
||||
}
|
||||
x0, y0, x1, y1 := x, y, x+w, y+h
|
||||
r, g, b, a := rects.Color(i).RGBA()
|
||||
vertices = append(vertices,
|
||||
int16(x0), int16(y0), int16(r), int16(g), int16(b), int16(a),
|
||||
int16(x1), int16(y0), int16(r), int16(g), int16(b), int16(a),
|
||||
int16(x0), int16(y1), int16(r), int16(g), int16(b), int16(a),
|
||||
int16(x1), int16(y1), int16(r), int16(g), int16(b), int16(a),
|
||||
)
|
||||
num++
|
||||
}
|
||||
if len(vertices) == 0 {
|
||||
return nil
|
||||
}
|
||||
c.BufferSubData(c.ArrayBuffer, vertices)
|
||||
c.DrawElements(c.Triangles, 6*num)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -136,22 +136,6 @@ func (f *Framebuffer) DrawTexture(c *opengl.Context, t *Texture, quads TextureQu
|
||||
return drawTexture(c, t.native, p, quads, geo, clr)
|
||||
}
|
||||
|
||||
func (f *Framebuffer) DrawLines(c *opengl.Context, lines Lines) error {
|
||||
if err := f.setAsViewport(c); err != nil {
|
||||
return err
|
||||
}
|
||||
p := f.projectionMatrix()
|
||||
return drawLines(c, p, lines)
|
||||
}
|
||||
|
||||
func (f *Framebuffer) DrawFilledRects(c *opengl.Context, rects Rects) error {
|
||||
if err := f.setAsViewport(c); err != nil {
|
||||
return err
|
||||
}
|
||||
p := f.projectionMatrix()
|
||||
return drawFilledRects(c, p, rects)
|
||||
}
|
||||
|
||||
func (f *Framebuffer) Pixels(c *opengl.Context) ([]uint8, error) {
|
||||
w, h := f.Size()
|
||||
w, h = NextPowerOf2Int(w), NextPowerOf2Int(h)
|
||||
|
@ -25,9 +25,7 @@ var (
|
||||
)
|
||||
|
||||
var (
|
||||
programTexture opengl.Program
|
||||
programSolidRect opengl.Program
|
||||
programSolidLine opengl.Program
|
||||
programTexture opengl.Program
|
||||
)
|
||||
|
||||
const indicesNum = math.MaxUint16 + 1
|
||||
@ -44,30 +42,12 @@ func initialize(c *opengl.Context) error {
|
||||
}
|
||||
defer c.DeleteShader(shaderVertexModelviewNative)
|
||||
|
||||
shaderVertexColorNative, err := c.NewShader(c.VertexShader, shader(c, shaderVertexColor))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer c.DeleteShader(shaderVertexColorNative)
|
||||
|
||||
shaderVertexColorLineNative, err := c.NewShader(c.VertexShader, shader(c, shaderVertexColorLine))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer c.DeleteShader(shaderVertexColorLineNative)
|
||||
|
||||
shaderFragmentTextureNative, err := c.NewShader(c.FragmentShader, shader(c, shaderFragmentTexture))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer c.DeleteShader(shaderFragmentTextureNative)
|
||||
|
||||
shaderFragmentSolidNative, err := c.NewShader(c.FragmentShader, shader(c, shaderFragmentSolid))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer c.DeleteShader(shaderFragmentSolidNative)
|
||||
|
||||
programTexture, err = c.NewProgram([]opengl.Shader{
|
||||
shaderVertexModelviewNative,
|
||||
shaderFragmentTextureNative,
|
||||
@ -76,22 +56,6 @@ func initialize(c *opengl.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
programSolidRect, err = c.NewProgram([]opengl.Shader{
|
||||
shaderVertexColorNative,
|
||||
shaderFragmentSolidNative,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
programSolidLine, err = c.NewProgram([]opengl.Shader{
|
||||
shaderVertexColorLineNative,
|
||||
shaderFragmentSolidNative,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 16 [bytse] is an arbitrary number which seems enough to draw anything. Fix this if necessary.
|
||||
const stride = 16
|
||||
c.NewBuffer(c.ArrayBuffer, 4*stride*quadsMaxNum, c.DynamicDraw)
|
||||
@ -223,50 +187,3 @@ func useProgramForTexture(c *opengl.Context, projectionMatrix []float32, texture
|
||||
c.DisableVertexAttribArray(program, "vertex")
|
||||
}
|
||||
}
|
||||
|
||||
func useProgramForLines(c *opengl.Context, projectionMatrix []float32) programFinisher {
|
||||
if !lastProgram.Equals(programSolidLine) {
|
||||
c.UseProgram(programSolidLine)
|
||||
lastProgram = programSolidLine
|
||||
}
|
||||
program := programSolidLine
|
||||
|
||||
c.BindElementArrayBuffer(indexBufferLines)
|
||||
|
||||
c.UniformFloats(program, "projection_matrix", projectionMatrix)
|
||||
|
||||
c.EnableVertexAttribArray(program, "vertex")
|
||||
c.EnableVertexAttribArray(program, "color")
|
||||
|
||||
// TODO: Change to floats?
|
||||
c.VertexAttribPointer(program, "vertex", true, false, int16Size*6, 2, int16Size*0)
|
||||
c.VertexAttribPointer(program, "color", false, true, int16Size*6, 4, int16Size*2)
|
||||
|
||||
return func() {
|
||||
c.DisableVertexAttribArray(program, "color")
|
||||
c.DisableVertexAttribArray(program, "vertex")
|
||||
}
|
||||
}
|
||||
|
||||
func useProgramForRects(c *opengl.Context, projectionMatrix []float32) programFinisher {
|
||||
if !lastProgram.Equals(programSolidRect) {
|
||||
c.UseProgram(programSolidRect)
|
||||
lastProgram = programSolidRect
|
||||
}
|
||||
program := programSolidRect
|
||||
|
||||
c.BindElementArrayBuffer(indexBufferQuads)
|
||||
|
||||
c.UniformFloats(program, "projection_matrix", projectionMatrix)
|
||||
|
||||
c.EnableVertexAttribArray(program, "vertex")
|
||||
c.EnableVertexAttribArray(program, "color")
|
||||
|
||||
c.VertexAttribPointer(program, "vertex", true, false, int16Size*6, 2, int16Size*0)
|
||||
c.VertexAttribPointer(program, "color", false, true, int16Size*6, 4, int16Size*2)
|
||||
|
||||
return func() {
|
||||
c.DisableVertexAttribArray(program, "color")
|
||||
c.DisableVertexAttribArray(program, "vertex")
|
||||
}
|
||||
}
|
||||
|
@ -23,10 +23,7 @@ type shaderId int
|
||||
|
||||
const (
|
||||
shaderVertexModelview shaderId = iota
|
||||
shaderVertexColor
|
||||
shaderVertexColorLine
|
||||
shaderFragmentTexture
|
||||
shaderFragmentSolid
|
||||
)
|
||||
|
||||
func shader(c *opengl.Context, id shaderId) string {
|
||||
@ -50,28 +47,6 @@ void main(void) {
|
||||
vertex_out_tex_coord = tex_coord;
|
||||
gl_Position = projection_matrix * modelview_matrix * vec4(vertex, 0, 1);
|
||||
}
|
||||
`,
|
||||
shaderVertexColor: `
|
||||
uniform highp mat4 projection_matrix;
|
||||
attribute highp vec2 vertex;
|
||||
attribute lowp vec4 color;
|
||||
varying lowp vec4 vertex_out_color;
|
||||
|
||||
void main(void) {
|
||||
vertex_out_color = color;
|
||||
gl_Position = projection_matrix * vec4(vertex, 0, 1);
|
||||
}
|
||||
`,
|
||||
shaderVertexColorLine: `
|
||||
uniform highp mat4 projection_matrix;
|
||||
attribute highp vec2 vertex;
|
||||
attribute lowp vec4 color;
|
||||
varying lowp vec4 vertex_out_color;
|
||||
|
||||
void main(void) {
|
||||
vertex_out_color = color;
|
||||
gl_Position = projection_matrix * vec4(vertex + vec2(0.5, 0.5), 0, 1);
|
||||
}
|
||||
`,
|
||||
shaderFragmentTexture: `
|
||||
uniform lowp sampler2D texture;
|
||||
@ -94,12 +69,5 @@ void main(void) {
|
||||
|
||||
gl_FragColor = color;
|
||||
}
|
||||
`,
|
||||
shaderFragmentSolid: `
|
||||
varying lowp vec4 vertex_out_color;
|
||||
|
||||
void main(void) {
|
||||
gl_FragColor = vertex_out_color;
|
||||
}
|
||||
`,
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user