[Mono-bugs] [Bug 678374] New: GetShaderInfoLog does not return any information + specification violates string immutability

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Thu Mar 10 00:51:48 EST 2011


https://bugzilla.novell.com/show_bug.cgi?id=678374

https://bugzilla.novell.com/show_bug.cgi?id=678374#c0


           Summary: GetShaderInfoLog does not return any information +
                    specification violates string immutability
    Classification: Mono
           Product: MonoTouch
           Version: SVN
          Platform: iPhone
        OS/Version: Apple iOS 4.2
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: Class Libraries
        AssignedTo: gnorton at novell.com
        ReportedBy: evan.olds at email.wsu.edu
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---


User-Agent:       Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US)
AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.127 Safari/534.16

When executing GL.GetShaderInfoLog to retrieve information about a failed
shader compilation, the output string is never altered, even when the output
length indicates that there is info-log data available.

Also, all overloads contain a string as the last parameter, whereas all
overloads specified in the 'regular' OpenTK documentation
(http://www.opentk.com/files/doc/class_open_t_k_1_1_graphics_1_1_e_s20_1_1_g_l.html)
use a string builder. Any string passed to any method in C# should be
immutable, thus it seems the specification is incorrect.

Before calling GetShaderInfoLog, the info log length is queried:

int* oneInt = stackalloc int[1];
oneInt[0] = -1;
GL.GetShader(shaderId, All.InfoLogLength, oneInt);

This makes oneInt[0] = 205 (in my specific case) and this seems to imply that
there is log data available from the previous shader compilation failure.

Reproducible: Always

Steps to Reproduce:
1. Create a new pixel shader:
int psId = GL.CreateShader(All.FragmentShader);

2. Try to compile the following fragment shader (GL.ShaderSource,
GL.CompileShader, etc.):
@"varying vec2 texCoord;
varying vec4 vertexColor;
uniform sampler2D texture;
void main()
{
    // Sample from the texture
    gl_FragColor = texture2D(texture, texCoord) * vertexColor;
}"

3. Try to get the shader info log after compilation of the shader fails
(querying compile status gives a value of 0):
int* oneInt = stackalloc int[1];
oneInt[0] = -1;
GL.GetShader(shaderId, All.InfoLogLength, oneInt);
if (oneInt[0] <= 0)
{
    return "(unknown shader compilation error)";
}
string info = new string('\0', oneInt[0]);
GL.GetShaderInfoLog(shaderId, info.Length, oneInt, info);
Actual Results:  
The 'info' string is never modified. It would be nice if the following method
(available on the dektop implementation of OpenTK) was implemented in MonoTouch
to reduce ambiguity:

static string     GetShaderInfoLog (Int32 shader)

Whether the above is implemented or not, it seems as though any method that
fills string data should either have a ref string, out string, or StringBuilder
parameter. No overload of GL.GetShaderInfoLog has these.

Expected Results:  
Output string ("info" in my code example) should contain details about why the
fragment shader did not compile. As one last note, the shader I listed in the
repro steps compiles and runs fine on desktop OpenTK apps, but I am unsure as
to what is wrong with it in the Open GL ES 2.0 context. Is such a shader
expected to not compile?

- Tested with debugging using iOS simulator Version 4.2 (235).
- OpenGL ES 2.0
- Previous vertex shader compilation succeeds, using similar compilation code.
- I'm classifying the severity as major, as it appears the info log
functionality is completely broken. Additional posts have been made in forums
by others, about the same issue
(http://forums.monotouch.net/yaf_postst1424.aspx). It appears as though their
issue was never resolved.
- My suggestion is a specification change and/or addition of the following
function:
static string     GetShaderInfoLog (Int32 shader)

-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.


More information about the mono-bugs mailing list