Sub Class_Globals
Private gl As JavaObject
Private program As Int
End Sub
' Public Sub Initialize(g As GL10) helyett most már JavaObject-et fogadunk
Public Sub Initialize(g As JavaObject)
gl = g
program = CreateShaderProgram
End Sub
' Aktiválja a shadert, és frissíti a uniform értékeket (kontraszt, fényerő)
Public Sub Use(contrast As Float, brightness As Float)
' Aktiválja a shadert
gl.RunMethod("glUseProgram", Array(program))
' Uniform változók helyének lekérése
Dim uContrast As Int = gl.RunMethod("glGetUniformLocation", Array(program, "u_Contrast"))
Dim uBrightness As Int = gl.RunMethod("glGetUniformLocation", Array(program, "u_Brightness"))
' Uniform változók beállítása
gl.RunMethod("glUniform1f", Array(uContrast, contrast))
gl.RunMethod("glUniform1f", Array(uBrightness, brightness))
End Sub
Public Sub GetProgram As Int
Return program
End Sub
' ====== Shader fordítás és linkelés ======
Private Sub CreateShaderProgram As Int
' Vertex és fragment shaderek lefordítása
Dim vertexShader As Int = CompileShader(GLES20_GL_VERTEX_SHADER, VertexShaderSource)
Dim fragmentShader As Int = CompileShader(GLES20_GL_FRAGMENT_SHADER, FragmentShaderSource)
' Shader program létrehozása és csatolása
Dim programID As Int = gl.RunMethod("glCreateProgram", Null)
gl.RunMethod("glAttachShader", Array(programID, vertexShader))
gl.RunMethod("glAttachShader", Array(programID, fragmentShader))
gl.RunMethod("glLinkProgram", Array(programID))
Return programID
End Sub
Private Sub CompileShader(shaderType As Int, shaderCode As String) As Int
' Shader fordítása
Dim shader2 As Int = gl.RunMethod("glCreateShader", Array(shaderType))
gl.RunMethod("glShaderSource", Array(shader2, shaderCode))
gl.RunMethod("glCompileShader", Array(shader2))
Return shader2
End Sub
' ====== GLSL Vertex Shader ======
Private Sub VertexShaderSource As String
Return $"attribute vec4 a_Position;
attribute vec2 a_TexCoord;
varying vec2 v_TexCoord;
void main() {
gl_Position = a_Position;
v_TexCoord = a_TexCoord;
}"$
End Sub
' ====== GLSL Fragment Shader ======
Private Sub FragmentShaderSource As String
Return $"precision mediump float;
uniform sampler2D u_Texture;
uniform float u_Contrast;
uniform float u_Brightness;
varying vec2 v_TexCoord;
void main() {
vec4 color = texture2D(u_Texture, v_TexCoord);
color.rgb += u_Brightness;
color.rgb = ((color.rgb - 0.5) * u_Contrast) + 0.5;
gl_FragColor = color;
}"$
End Sub
' ====== GLES2 konstansok ======
Private Sub GLES20_GL_VERTEX_SHADER As Int
Return 35633 ' Vertex shader típus
End Sub
Private Sub GLES20_GL_FRAGMENT_SHADER As Int
Return 35632 ' Fragment shader típus
End Sub