Shader.smali
.class public Lim/tpelyyftgw/ui/components/paint/Shader;
.super Ljava/lang/Object;
.source "Shader.java"
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;
}
.end annotation
# instance fields
.field private fragmentShader:I
.field protected program:I
.field protected uniformsMap:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/lang/Integer;",
">;"
}
.end annotation
.end field
.field private vertexShader:I
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V
.registers 12
.param p1, "vertexShader" # Ljava/lang/String;
.param p2, "fragmentShader" # Ljava/lang/String;
.param p3, "attributes" # [Ljava/lang/String;
.param p4, "uniforms" # [Ljava/lang/String;
.line 20
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 18
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
iput-object v0, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->uniformsMap:Ljava/util/Map;
.line 21
invoke-static {}, Landroid/opengl/GLES20;->glCreateProgram()I
move-result v0
iput v0, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->program:I
.line 23
const v0, 0x8b31
invoke-direct {p0, v0, p1}, Lim/tpelyyftgw/ui/components/paint/Shader;->compileShader(ILjava/lang/String;)Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;
move-result-object v0
.line 24
.local v0, "vResult":Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;
iget v1, v0, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->status:I
const/4 v2, 0x0
if-nez v1, :cond_2d
.line 25
sget-boolean v1, Lim/tpelyyftgw/messenger/BuildVars;->LOGS_ENABLED:Z
if-eqz v1, :cond_25
.line 26
const-string v1, "Vertex shader compilation failed"
invoke-static {v1}, Lim/tpelyyftgw/messenger/FileLog;->e(Ljava/lang/String;)V
.line 28
:cond_25
iget v1, v0, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->shader:I
iget v3, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->program:I
invoke-direct {p0, v1, v2, v3}, Lim/tpelyyftgw/ui/components/paint/Shader;->destroyShader(III)V
.line 29
return-void
.line 32
:cond_2d
const v1, 0x8b30
invoke-direct {p0, v1, p2}, Lim/tpelyyftgw/ui/components/paint/Shader;->compileShader(ILjava/lang/String;)Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;
move-result-object v1
.line 33
.local v1, "fResult":Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;
iget v3, v1, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->status:I
if-nez v3, :cond_4b
.line 34
sget-boolean v2, Lim/tpelyyftgw/messenger/BuildVars;->LOGS_ENABLED:Z
if-eqz v2, :cond_41
.line 35
const-string v2, "Fragment shader compilation failed"
invoke-static {v2}, Lim/tpelyyftgw/messenger/FileLog;->e(Ljava/lang/String;)V
.line 37
:cond_41
iget v2, v0, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->shader:I
iget v3, v1, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->shader:I
iget v4, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->program:I
invoke-direct {p0, v2, v3, v4}, Lim/tpelyyftgw/ui/components/paint/Shader;->destroyShader(III)V
.line 38
return-void
.line 41
:cond_4b
iget v3, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->program:I
iget v4, v0, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->shader:I
invoke-static {v3, v4}, Landroid/opengl/GLES20;->glAttachShader(II)V
.line 42
iget v3, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->program:I
iget v4, v1, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->shader:I
invoke-static {v3, v4}, Landroid/opengl/GLES20;->glAttachShader(II)V
.line 44
const/4 v3, 0x0
.local v3, "i":I
:goto_5a
array-length v4, p3
if-ge v3, v4, :cond_67
.line 45
iget v4, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->program:I
aget-object v5, p3, v3
invoke-static {v4, v3, v5}, Landroid/opengl/GLES20;->glBindAttribLocation(IILjava/lang/String;)V
.line 44
add-int/lit8 v3, v3, 0x1
goto :goto_5a
.line 48
.end local v3 # "i":I
:cond_67
iget v3, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->program:I
invoke-direct {p0, v3}, Lim/tpelyyftgw/ui/components/paint/Shader;->linkProgram(I)I
move-result v3
if-nez v3, :cond_79
.line 49
iget v2, v0, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->shader:I
iget v3, v1, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->shader:I
iget v4, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->program:I
invoke-direct {p0, v2, v3, v4}, Lim/tpelyyftgw/ui/components/paint/Shader;->destroyShader(III)V
.line 50
return-void
.line 53
:cond_79
array-length v3, p4
:goto_7a
if-ge v2, v3, :cond_90
aget-object v4, p4, v2
.line 54
.local v4, "uniform":Ljava/lang/String;
iget-object v5, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->uniformsMap:Ljava/util/Map;
iget v6, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->program:I
invoke-static {v6, v4}, Landroid/opengl/GLES20;->glGetUniformLocation(ILjava/lang/String;)I
move-result v6
invoke-static {v6}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v6
invoke-interface {v5, v4, v6}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 53
.end local v4 # "uniform":Ljava/lang/String;
add-int/lit8 v2, v2, 0x1
goto :goto_7a
.line 57
:cond_90
iget v2, v0, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->shader:I
if-eqz v2, :cond_99
.line 58
iget v2, v0, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->shader:I
invoke-static {v2}, Landroid/opengl/GLES20;->glDeleteShader(I)V
.line 61
:cond_99
iget v2, v1, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->shader:I
if-eqz v2, :cond_a2
.line 62
iget v2, v1, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;->shader:I
invoke-static {v2}, Landroid/opengl/GLES20;->glDeleteShader(I)V
.line 64
:cond_a2
return-void
.end method
.method public static SetColorUniform(II)V
.registers 7
.param p0, "location" # I
.param p1, "color" # I
.line 132
invoke-static {p1}, Landroid/graphics/Color;->red(I)I
move-result v0
int-to-float v0, v0
const/high16 v1, 0x437f0000 # 255.0f
div-float/2addr v0, v1
.line 133
.local v0, "r":F
invoke-static {p1}, Landroid/graphics/Color;->green(I)I
move-result v2
int-to-float v2, v2
div-float/2addr v2, v1
.line 134
.local v2, "g":F
invoke-static {p1}, Landroid/graphics/Color;->blue(I)I
move-result v3
int-to-float v3, v3
div-float/2addr v3, v1
.line 135
.local v3, "b":F
invoke-static {p1}, Landroid/graphics/Color;->alpha(I)I
move-result v4
int-to-float v4, v4
div-float/2addr v4, v1
.line 137
.local v4, "a":F
invoke-static {p0, v0, v2, v3, v4}, Landroid/opengl/GLES20;->glUniform4f(IFFFF)V
.line 138
return-void
.end method
.method private compileShader(ILjava/lang/String;)Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;
.registers 7
.param p1, "type" # I
.param p2, "shaderCode" # Ljava/lang/String;
.line 88
invoke-static {p1}, Landroid/opengl/GLES20;->glCreateShader(I)I
move-result v0
.line 89
.local v0, "shader":I
invoke-static {v0, p2}, Landroid/opengl/GLES20;->glShaderSource(ILjava/lang/String;)V
.line 90
invoke-static {v0}, Landroid/opengl/GLES20;->glCompileShader(I)V
.line 92
const/4 v1, 0x1
new-array v1, v1, [I
.line 93
.local v1, "compileStatus":[I
const/4 v2, 0x0
const v3, 0x8b81
invoke-static {v0, v3, v1, v2}, Landroid/opengl/GLES20;->glGetShaderiv(II[II)V
.line 94
aget v3, v1, v2
if-nez v3, :cond_23
.line 95
sget-boolean v3, Lim/tpelyyftgw/messenger/BuildVars;->LOGS_ENABLED:Z
if-eqz v3, :cond_23
.line 96
invoke-static {v0}, Landroid/opengl/GLES20;->glGetShaderInfoLog(I)Ljava/lang/String;
move-result-object v3
invoke-static {v3}, Lim/tpelyyftgw/messenger/FileLog;->e(Ljava/lang/String;)V
.line 100
:cond_23
new-instance v3, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;
aget v2, v1, v2
invoke-direct {v3, p0, v0, v2}, Lim/tpelyyftgw/ui/components/paint/Shader$CompilationResult;-><init>(Lim/tpelyyftgw/ui/components/paint/Shader;II)V
return-object v3
.end method
.method private destroyShader(III)V
.registers 4
.param p1, "vertexShader" # I
.param p2, "fragmentShader" # I
.param p3, "program" # I
.line 118
if-eqz p1, :cond_5
.line 119
invoke-static {p1}, Landroid/opengl/GLES20;->glDeleteShader(I)V
.line 122
:cond_5
if-eqz p2, :cond_a
.line 123
invoke-static {p2}, Landroid/opengl/GLES20;->glDeleteShader(I)V
.line 126
:cond_a
if-eqz p3, :cond_f
.line 127
invoke-static {p1}, Landroid/opengl/GLES20;->glDeleteProgram(I)V
.line 129
:cond_f
return-void
.end method
.method private linkProgram(I)I
.registers 5
.param p1, "program" # I
.line 104
invoke-static {p1}, Landroid/opengl/GLES20;->glLinkProgram(I)V
.line 106
const/4 v0, 0x1
new-array v0, v0, [I
.line 107
.local v0, "linkStatus":[I
const/4 v1, 0x0
const v2, 0x8b82
invoke-static {p1, v2, v0, v1}, Landroid/opengl/GLES20;->glGetProgramiv(II[II)V
.line 108
aget v2, v0, v1
if-nez v2, :cond_1c
.line 109
sget-boolean v2, Lim/tpelyyftgw/messenger/BuildVars;->LOGS_ENABLED:Z
if-eqz v2, :cond_1c
.line 110
invoke-static {p1}, Landroid/opengl/GLES20;->glGetProgramInfoLog(I)Ljava/lang/String;
move-result-object v2
invoke-static {v2}, Lim/tpelyyftgw/messenger/FileLog;->e(Ljava/lang/String;)V
.line 114
:cond_1c
aget v1, v0, v1
return v1
.end method
# virtual methods
.method public cleanResources()V
.registers 2
.line 67
iget v0, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->program:I
if-eqz v0, :cond_c
.line 68
iget v0, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->vertexShader:I
invoke-static {v0}, Landroid/opengl/GLES20;->glDeleteProgram(I)V
.line 69
const/4 v0, 0x0
iput v0, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->program:I
.line 71
:cond_c
return-void
.end method
.method public getUniform(Ljava/lang/String;)I
.registers 3
.param p1, "key" # Ljava/lang/String;
.line 84
iget-object v0, p0, Lim/tpelyyftgw/ui/components/paint/Shader;->uniformsMap:Ljava/util/Map;
invoke-interface {v0, p1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/Integer;
invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I
move-result v0
return v0
.end method