Graphics.Rendering.OpenGL.GL.Shaders API needlessly "helpful"
Edward Kmett <[email protected]> Fri, 28 Oct 2011 17:14:22 -0400
| Newsgroups | gmane.comp.lang.haskell.hopengl |
|---|---|
| Message-ID | <CAJumaK8JovMc6chDFCvqDxztiHxzCWYriQETanN0w-Lpog9AhA@mail.gmail.com> |
--===============2964010718979018044== Content-Type: multipart/alternative; boundary=f46d04451a457f4f3c04b0625fdc --f46d04451a457f4f3c04b0625fdc Content-Type: text/plain; charset=UTF-8 Is there any thought as to a better way to deal with https://github.com/haskell-opengl/OpenGL/blob/master/Graphics/Rendering/OpenGL/GL/Shaders.hs? If you have code that dynamically constructs and deletes single shaders frequently, the API exposed there just introduces O(n) overhead for every such construction. *setAttachedShaders* :: Program -> ([VertexShader],[FragmentShader]) -> IO () setAttachedShaders p@(Program program) (vs, fs) = do currentIDs <- getAttachedShaderIDs p let newIDs = map shaderID vs ++ map shaderID fs mapM_ (glAttachShader program) (newIDs \\ currentIDs) mapM_ (glDetachShader program) (currentIDs \\ newIDs) -Edward Kmett --f46d04451a457f4f3c04b0625fdc Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <div><span style=3D"background-color: transparent; ">Is there any thought a= s to a better way to deal with</span></div><div><br></div><div><a href=3D"h= ttps://github.com/haskell-opengl/OpenGL/blob/master/Graphics/Rendering/Open= GL/GL/Shaders.hs">https://github.com/haskell-opengl/OpenGL/blob/master/Grap= hics/Rendering/OpenGL/GL/Shaders.hs</a> ?</div> <div><br></div><div>If you have code that dynamically constructs and delete= s single shaders frequently, the API exposed there just introduces O(n) ove= rhead for every such construction.</div><div><pre style=3D"margin-top: 0px;= margin-bottom: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: = 0px; padding-left: 0px; font: normal normal normal 12px/normal 'Bitstre= am Vera Sans Mono', Courier, monospace; background-color: rgb(255, 255,= 255); "> <div class=3D"line" id=3D"LC245" style=3D"margin-top: 0px; margin-right: 0p= x; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0= px; padding-bottom: 0px; padding-left: 1em; "><span class=3D"nf" style=3D"m= argin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; pa= dding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;= "><font face=3D"arial" size=3D"2"><span style=3D"white-space: normal;"><br= class=3D"Apple-interchange-newline"> </span></font><font color=3D"#990000"><span style=3D"line-height: 1.4;"><b>= setAttachedShaders</b></span></font></span><span style=3D"line-height: 1.4;= "> </span><span class=3D"ow" style=3D"font-family: 'Bitstream Vera Sans= Mono', Courier, monospace; line-height: 1.4; font-size: 12px; margin-t= op: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-t= op: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-w= eight: bold; ">::</span><span style=3D"line-height: 1.4;"> </span><span cla= ss=3D"kt" style=3D"font-family: 'Bitstream Vera Sans Mono', Courier= , monospace; line-height: 1.4; font-size: 12px; margin-top: 0px; margin-rig= ht: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-ri= ght: 0px; padding-bottom: 0px; padding-left: 0px; color: rgb(68, 85, 136); = font-weight: bold; ">Program</span><span style=3D"line-height: 1.4;"> </spa= n><span class=3D"ow" style=3D"font-family: 'Bitstream Vera Sans Mono= 9;, Courier, monospace; line-height: 1.4; font-size: 12px; margin-top: 0px;= margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px;= padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-weight: b= old; ">-></span><span style=3D"line-height: 1.4;"> </span><span class=3D= "p" style=3D"font-family: 'Bitstream Vera Sans Mono', Courier, mono= space; line-height: 1.4; font-size: 12px; margin-top: 0px; margin-right: 0p= x; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0= px; padding-bottom: 0px; padding-left: 0px; ">([</span><span class=3D"kt" s= tyle=3D"font-family: 'Bitstream Vera Sans Mono', Courier, monospace= ; line-height: 1.4; font-size: 12px; margin-top: 0px; margin-right: 0px; ma= rgin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; p= adding-bottom: 0px; padding-left: 0px; color: rgb(68, 85, 136); font-weight= : bold; ">VertexShader</span><span class=3D"p" style=3D"font-family: 'B= itstream Vera Sans Mono', Courier, monospace; line-height: 1.4; font-si= ze: 12px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-le= ft: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding= -left: 0px; ">],[</span><span class=3D"kt" style=3D"font-family: 'Bitst= ream Vera Sans Mono', Courier, monospace; line-height: 1.4; font-size: = 12px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: = 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-lef= t: 0px; color: rgb(68, 85, 136); font-weight: bold; ">FragmentShader</span>= <span class=3D"p" style=3D"font-family: 'Bitstream Vera Sans Mono',= Courier, monospace; line-height: 1.4; font-size: 12px; margin-top: 0px; ma= rgin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; pa= dding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">])</span><span = style=3D"line-height: 1.4;"> </span><span class=3D"ow" style=3D"font-family= : 'Bitstream Vera Sans Mono', Courier, monospace; line-height: 1.4;= font-size: 12px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; m= argin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px;= padding-left: 0px; font-weight: bold; ">-></span><span style=3D"line-he= ight: 1.4;"> </span><span class=3D"kt" style=3D"font-family: 'Bitstream= Vera Sans Mono', Courier, monospace; line-height: 1.4; font-size: 12px= ; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;= padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0= px; color: rgb(68, 85, 136); font-weight: bold; ">IO</span><span style=3D"l= ine-height: 1.4;"> </span><span class=3D"nb" style=3D"font-family: 'Bit= stream Vera Sans Mono', Courier, monospace; line-height: 1.4; font-size= : 12px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left= : 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-l= eft: 0px; color: rgb(0, 134, 179); ">()</span></div> <div class=3D"line" id=3D"LC246" style=3D"font-family: 'Bitstream Vera = Sans Mono', Courier, monospace; line-height: 1.4; font-size: 12px; marg= in-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; paddi= ng-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 1em; "> <span class=3D"nf" style=3D"margin-top: 0px; margin-right: 0px; margin-bott= om: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bo= ttom: 0px; padding-left: 0px; color: rgb(153, 0, 0); font-weight: bold; ">s= etAttachedShaders</span> <span class=3D"n" style=3D"margin-top: 0px; margin= -right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; paddin= g-right: 0px; padding-bottom: 0px; padding-left: 0px; ">p</span><span class= =3D"o" style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; mar= gin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; p= adding-left: 0px; font-weight: bold; ">@</span><span class=3D"p" style=3D"m= argin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; pa= dding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;= ">(</span><span class=3D"kt" style=3D"margin-top: 0px; margin-right: 0px; = margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px;= padding-bottom: 0px; padding-left: 0px; color: rgb(68, 85, 136); font-weig= ht: bold; ">Program</span> <span class=3D"n" style=3D"margin-top: 0px; marg= in-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padd= ing-right: 0px; padding-bottom: 0px; padding-left: 0px; ">program</span><sp= an class=3D"p" style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: = 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom= : 0px; padding-left: 0px; ">)</span> <span class=3D"p" style=3D"margin-top:= 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top:= 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">(</span= ><span class=3D"n" style=3D"margin-top: 0px; margin-right: 0px; margin-bott= om: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bo= ttom: 0px; padding-left: 0px; ">vs</span><span class=3D"p" style=3D"margin-= top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-= top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">,</= span> <span class=3D"n" style=3D"margin-top: 0px; margin-right: 0px; margin= -bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; paddi= ng-bottom: 0px; padding-left: 0px; ">fs</span><span class=3D"p" style=3D"ma= rgin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; pad= ding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; = ">)</span> <span class=3D"ow" style=3D"margin-top: 0px; margin-right: 0px; = margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px;= padding-bottom: 0px; padding-left: 0px; font-weight: bold; ">=3D</span> <s= pan class=3D"kr" style=3D"margin-top: 0px; margin-right: 0px; margin-bottom= : 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bott= om: 0px; padding-left: 0px; font-weight: bold; ">do</span></div> <div class=3D"line" id=3D"LC247" style=3D"font-family: 'Bitstream Vera = Sans Mono', Courier, monospace; line-height: 1.4; font-size: 12px; marg= in-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; paddi= ng-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 1em; "> =C2=A0=C2=A0=C2=A0<span class=3D"n" style=3D"margin-top: 0px; margin-right:= 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right= : 0px; padding-bottom: 0px; padding-left: 0px; ">currentIDs</span> <span cl= ass=3D"ow" style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px;= margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0p= x; padding-left: 0px; font-weight: bold; "><-</span> <span class=3D"n" s= tyle=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left= : 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-l= eft: 0px; ">getAttachedShaderIDs</span> <span class=3D"n" style=3D"margin-t= op: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-t= op: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">p</s= pan></div> <div class=3D"line" id=3D"LC248" style=3D"font-family: 'Bitstream Vera = Sans Mono', Courier, monospace; line-height: 1.4; font-size: 12px; marg= in-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; paddi= ng-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 1em; "> =C2=A0=C2=A0=C2=A0<span class=3D"kr" style=3D"margin-top: 0px; margin-right= : 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-righ= t: 0px; padding-bottom: 0px; padding-left: 0px; font-weight: bold; ">let</s= pan> <span class=3D"n" style=3D"margin-top: 0px; margin-right: 0px; margin-= bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; paddin= g-bottom: 0px; padding-left: 0px; ">newIDs</span> <span class=3D"ow" style= =3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0p= x; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left:= 0px; font-weight: bold; ">=3D</span> <span class=3D"n" style=3D"margin-top= : 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top= : 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">map</s= pan> <span class=3D"n" style=3D"margin-top: 0px; margin-right: 0px; margin-= bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; paddin= g-bottom: 0px; padding-left: 0px; ">shaderID</span> <span class=3D"n" style= =3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0p= x; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left:= 0px; ">vs</span> <span class=3D"o" style=3D"margin-top: 0px; margin-right:= 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right= : 0px; padding-bottom: 0px; padding-left: 0px; font-weight: bold; ">++</spa= n> <span class=3D"n" style=3D"margin-top: 0px; margin-right: 0px; margin-bo= ttom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-= bottom: 0px; padding-left: 0px; ">map</span> <span class=3D"n" style=3D"mar= gin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padd= ing-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "= >shaderID</span> <span class=3D"n" style=3D"margin-top: 0px; margin-right: = 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right:= 0px; padding-bottom: 0px; padding-left: 0px; ">fs</span></div> <div class=3D"line" id=3D"LC249" style=3D"font-family: 'Bitstream Vera = Sans Mono', Courier, monospace; line-height: 1.4; font-size: 12px; marg= in-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; paddi= ng-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 1em; "> =C2=A0=C2=A0=C2=A0<span class=3D"n" style=3D"margin-top: 0px; margin-right:= 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right= : 0px; padding-bottom: 0px; padding-left: 0px; ">mapM_</span> <span class= =3D"p" style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; mar= gin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; p= adding-left: 0px; ">(</span><span class=3D"n" style=3D"margin-top: 0px; mar= gin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; pad= ding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">glAttachShader</= span> <span class=3D"n" style=3D"margin-top: 0px; margin-right: 0px; margin= -bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; paddi= ng-bottom: 0px; padding-left: 0px; ">program</span><span class=3D"p" style= =3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0p= x; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left:= 0px; ">)</span> <span class=3D"p" style=3D"margin-top: 0px; margin-right: = 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right:= 0px; padding-bottom: 0px; padding-left: 0px; ">(</span><span class=3D"n" s= tyle=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left= : 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-l= eft: 0px; ">newIDs</span> <span class=3D"o" style=3D"margin-top: 0px; margi= n-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; paddi= ng-right: 0px; padding-bottom: 0px; padding-left: 0px; font-weight: bold; "= >\\</span> <span class=3D"n" style=3D"margin-top: 0px; margin-right: 0px; m= argin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; = padding-bottom: 0px; padding-left: 0px; ">currentIDs</span><span class=3D"p= " style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-l= eft: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; paddin= g-left: 0px; ">)</span></div> <div class=3D"line" id=3D"LC250" style=3D"font-family: 'Bitstream Vera = Sans Mono', Courier, monospace; line-height: 1.4; font-size: 12px; marg= in-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; paddi= ng-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 1em; "> =C2=A0=C2=A0=C2=A0<span class=3D"n" style=3D"margin-top: 0px; margin-right:= 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right= : 0px; padding-bottom: 0px; padding-left: 0px; ">mapM_</span> <span class= =3D"p" style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; mar= gin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; p= adding-left: 0px; ">(</span><span class=3D"n" style=3D"margin-top: 0px; mar= gin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; pad= ding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">glDetachShader</= span> <span class=3D"n" style=3D"margin-top: 0px; margin-right: 0px; margin= -bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; paddi= ng-bottom: 0px; padding-left: 0px; ">program</span><span class=3D"p" style= =3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0p= x; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left:= 0px; ">)</span> <span class=3D"p" style=3D"margin-top: 0px; margin-right: = 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right:= 0px; padding-bottom: 0px; padding-left: 0px; ">(</span><span class=3D"n" s= tyle=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left= : 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-l= eft: 0px; ">currentIDs</span> <span class=3D"o" style=3D"margin-top: 0px; m= argin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; p= adding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-weight: bol= d; ">\\</span> <span class=3D"n" style=3D"margin-top: 0px; margin-right: 0p= x; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0= px; padding-bottom: 0px; padding-left: 0px; ">newIDs</span><span class=3D"p= " style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-l= eft: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; paddin= g-left: 0px; ">)</span></div> <div style=3D"font-family: 'Bitstream Vera Sans Mono', Courier, mon= ospace; line-height: 1.4; font-size: 12px; "><span class=3D"p" style=3D"mar= gin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padd= ing-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "= ><br> </span></div></pre></div><div>-Edward Kmett</div> --f46d04451a457f4f3c04b0625fdc-- --===============2964010718979018044== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ HOpenGL mailing list [email protected] http://www.haskell.org/mailman/listinfo/hopengl --===============2964010718979018044==--