예제 #1
0
파일: clouds.go 프로젝트: num5/steven
func (c *cloudState) tick(delta float64) {
	if !DrawClouds {
		return
	}
	c.offset += delta
	tex := GetTexture("steven:environment/clouds")
	r := tex.Rect()

	c.program.Use()
	c.shader.PerspectiveMatrix.Matrix4(&perspectiveMatrix)
	c.shader.CameraMatrix.Matrix4(&cameraMatrix)
	c.shader.SkyOffset.Float(SkyOffset)
	c.shader.LightLevel.Float(LightLevel)
	c.shader.Offset.Float3(float32(int(Camera.X)), 0, float32(int(Camera.Z)))
	c.shader.TextureInfo.Float4(
		float32(r.X),
		float32(r.Y),
		float32(r.Width),
		float32(r.Height),
	)
	c.shader.Atlas.Float(float32(tex.Atlas()))
	c.shader.CloudOffset.Float(float32(c.offset / 60.0))

	c.shader.Textures.Int(0)

	gl.ActiveTexture(1)
	c.texture.Bind(gl.Texture2D)
	if c.dirty {
		c.texture.SubImage2D(0, 0, 0, 512, 512, gl.Red, gl.UnsignedByte, c.data)
		c.dirty = false
	}
	c.shader.CloudMap.Int(1)
	c.array.Bind()
	gl.DrawArrays(gl.Points, 0, c.numPoints)
}
예제 #2
0
파일: trans.go 프로젝트: num5/steven
func transDraw() {
	gl.ActiveTexture(0)
	accum.Bind(gl.Texture2D)
	gl.ActiveTexture(1)
	revealage.Bind(gl.Texture2D)
	gl.ActiveTexture(2)
	fbColor.Bind(gl.Texture2DMultisample)

	transState.program.Use()
	transState.shader.Accum.Int(0)
	transState.shader.Revealage.Int(1)
	transState.shader.Color.Int(2)
	transState.shader.Samples.Int(rSamples.Value())
	transState.array.Bind()
	gl.DrawArrays(gl.Triangles, 0, 6)
}
예제 #3
0
파일: line.go 프로젝트: num5/steven
func drawLines() {
	if lineState.count > 0 {
		gl.Enable(gl.Blend)
		lineState.program.Use()
		lineState.shader.PerspectiveMatrix.Matrix4(&perspectiveMatrix)
		lineState.shader.CameraMatrix.Matrix4(&cameraMatrix)
		lineState.array.Bind()
		lineState.buffer.Bind(gl.ArrayBuffer)
		if len(lineState.data) > lineState.prevSize {
			lineState.prevSize = len(lineState.data)
			lineState.buffer.Data(lineState.data, gl.DynamicDraw)
		} else {
			target := lineState.buffer.Map(gl.WriteOnly, len(lineState.data))
			copy(target, lineState.data)
			lineState.buffer.Unmap()
		}
		gl.DrawArrays(gl.Triangles, 0, lineState.count)
		lineState.count = 0
		lineState.data = lineState.data[:0]
		gl.Disable(gl.Blend)
	}
}