| @@ -0,0 +1,31 @@ | |||||
| {$CLASS Color} | |||||
| {$PROPERTY UseColorMap 'false'} | |||||
| {$END} | |||||
| {$CLASS ColorFrag $EXTENDS Color} | |||||
| {$FUNC 'vec4' GetColor $INLINE} | |||||
| {$IF UseColorMap} | |||||
| {$VAR 'vec2' '_texCoord' 'gl_TexCoord[0].st'} | |||||
| {$UNIFORM 'sampler2D' 'uColorMap'} | |||||
| return texture2D(uColorMap, _texCoord); | |||||
| {$ELSE} | |||||
| return gl_Color; | |||||
| {$END} | |||||
| {$END} | |||||
| {$MAIN} | |||||
| gl_FragColor = {$CALL GetColor}; | |||||
| {$END} | |||||
| {$END} | |||||
| {$CLASS ColorVert $EXTENDS Color} | |||||
| {$MAIN} | |||||
| gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; | |||||
| {$IF UseColorMap} | |||||
| gl_TexCoord[0] = gl_MultiTexCoord0; | |||||
| {$ELSE} | |||||
| gl_FrontColor = gl_Color; | |||||
| gl_BackColor = gl_Color; | |||||
| {$END} | |||||
| {$END} | |||||
| {$END} | |||||
| @@ -0,0 +1,38 @@ | |||||
| {$INCLUDE 'color.shdr'} | |||||
| {$CLASS PhongLight} | |||||
| {$PROPERTY UsePhongLight 'false'} | |||||
| {$IF UsePhongLight} | |||||
| {$VARYING 'vec3' 'vNormal'} | |||||
| {$VARYING 'vec3' 'vVertex'} | |||||
| {$END} | |||||
| {$END} | |||||
| {$CLASS PhongLightFrag $EXTENDS PhongLight ColorFrag} | |||||
| {$MAIN} | |||||
| vec4 color = {$CALL GetColor}; | |||||
| {$IF UsePhongLight} | |||||
| vec3 eye = normalize(-vVertex); | |||||
| vec3 lightVec = gl_LightSource[0].position.xyz - vVertex; | |||||
| vec3 reflected = normalize(reflect(lightVec, vNormal)); | |||||
| vec4 ambient = gl_LightSource[0].ambient * gl_FrontMaterial.ambient; | |||||
| vec4 diffuse = gl_LightSource[0].diffuse * max(dot(vNormal, lightVec), 0.0) * gl_FrontMaterial.diffuse; | |||||
| vec4 specular = gl_LightSource[0].specular * pow(max(dot(reflected, eye), 0.0), gl_FrontMaterial.shininess) * gl_FrontMaterial.specular; | |||||
| gl_FragColor = vec4((ambient + diffuse) * color) + specular; | |||||
| {$ELSE} | |||||
| gl_FragColor = color; | |||||
| {$END} | |||||
| {$END} | |||||
| {$END} | |||||
| {$CLASS PhongLightVert $EXTENDS PhongLight ColorVert} | |||||
| {$MAIN} | |||||
| {$INHERITED ColorVert $INLINE}; | |||||
| {$IF UsePhongLight} | |||||
| vNormal = normalize(gl_NormalMatrix * gl_Normal); | |||||
| vVertex = vec3(gl_ModelViewMatrix * gl_Vertex); | |||||
| {$END} | |||||
| {$END} | |||||
| {$END} | |||||
| @@ -0,0 +1,9 @@ | |||||
| {$MAIN} | |||||
| {$PROPERTY EnableTexture 'false'} | |||||
| {$IF EnableTexture} | |||||
| {$UNIFORM 'sampler2D' 'uTexture0'} | |||||
| gl_FragColor = texture2D(uTexture0, gl_TexCoord[0].st); | |||||
| {$ELSE} | |||||
| gl_FragColor = gl_Color; | |||||
| {$END} | |||||
| {$END} | |||||
| @@ -166,7 +166,7 @@ function LibOpen(const aLibName: String; out aError: String): TLibHandle; | |||||
| begin | begin | ||||
| result := LoadLibraryA(PAnsiChar(AnsiString(aLibName))); | result := LoadLibraryA(PAnsiChar(AnsiString(aLibName))); | ||||
| if (result = 0) | if (result = 0) | ||||
| then aError := GetLastError() | |||||
| then aError := SysErrorMessage(GetLastError()) | |||||
| else aError := ''; | else aError := ''; | ||||
| end; | end; | ||||
| @@ -555,7 +555,7 @@ var | |||||
| i: Integer; | i: Integer; | ||||
| begin | begin | ||||
| i := fProperties.IndexOf(aName); | i := fProperties.IndexOf(aName); | ||||
| if (i <= 0) then begin | |||||
| if (i < 0) then begin | |||||
| SetLastError(LSF_ERR_INVALID_PROPERTY_NAME, Format('%s is not a valid/known property name', [aName])); | SetLastError(LSF_ERR_INVALID_PROPERTY_NAME, Format('%s is not a valid/known property name', [aName])); | ||||
| result := LastErrorCode; | result := LastErrorCode; | ||||
| end else | end else | ||||