Changeset 1385


Ignore:
Timestamp:
May 14, 2012, 8:40:18 AM (9 years ago)
Author:
sam
Message:

gpu: allow to load a .lolfx file instead of all those shaders.

Location:
trunk
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/Makefile.am

    r1383 r1385  
    5555        echo "/* This file was autogenerated. DO NOT MODIFY IT. */" > $@.tmp
    5656        echo "char const *lolfx_$(notdir $(^:%.lolfx=%)) =" >> $@.tmp
    57         $(SED) 's/"/\\"/g' $^ | $(SED) 's/.*/"&"/' >> $@.tmp
     57        $(SED) 's/"/\\"/g' $^ | $(SED) 's/.*/"&\\n"/' >> $@.tmp
    5858        echo ";" >> $@.tmp
    5959        mv $@.tmp $@
  • trunk/src/gpu/shader.cpp

    r1289 r1385  
    8282 * Public Shader class
    8383 */
     84
     85Shader *Shader::Create(char const *lolfx)
     86{
     87    char *src = new char[strlen(lolfx) + 2];
     88    memcpy(src + 1, lolfx, strlen(lolfx) + 1);
     89    src[0] = '\n';
     90
     91    /* Parse the crap */
     92    Array<char const *, char const *> sections;
     93    char *key = NULL;
     94    for (char *parser = src; *parser; )
     95    {
     96        if (key == NULL && (parser[0] == '\n' || parser[0] == '\r')
     97             && parser[1] == '-' && parser[2] == '-' && parser[3] == ' ')
     98        {
     99            *parser = '\0';
     100            parser += 4;
     101            key = parser;
     102        }
     103        else if (key && parser[0] == ' ')
     104        {
     105            *parser++ = '\0';
     106        }
     107        else if (key && (parser[0] == '\n' || parser[0] == '\r'))
     108        {
     109            sections.Push(key, parser);
     110            parser++;
     111            key = NULL;
     112        }
     113        else
     114        {
     115            parser++;
     116        }
     117    }
     118
     119    char const *vert = NULL, *frag = NULL;
     120    for (int i = 0; i < sections.Count(); i++)
     121    {
     122#if !defined __CELLOS_LV2__ && !defined _XBOX && !defined USE_D3D9
     123        if (!strcmp(sections[i].m1, "GLSL.Vert"))
     124            vert = sections[i].m2;
     125        if (!strcmp(sections[i].m1, "GLSL.Frag"))
     126            frag = sections[i].m2;
     127#else
     128        if (!strcmp(sections[i].m1, "HLSL.Vert"))
     129            vert = sections[i].m2;
     130        if (!strcmp(sections[i].m1, "HLSL.Frag"))
     131            frag = sections[i].m2;
     132#endif
     133    }
     134
     135    Shader *ret = NULL;
     136    if (vert && frag)
     137        ret = Create(vert, frag);
     138
     139    delete[] src;
     140
     141    return ret;
     142}
    84143
    85144Shader *Shader::Create(char const *vert, char const *frag)
  • trunk/src/gpu/shader.h

    r1259 r1385  
    5252{
    5353public:
     54    static Shader *Create(char const *lolfx);
    5455    static Shader *Create(char const *vert, char const *frag);
    5556    static void Destroy(Shader *shader);
  • trunk/test/tutorial/01_triangle.cpp

    r1310 r1385  
    3232#endif
    3333
     34extern char const *lolfx_01_triangle;
     35
    3436class Triangle : public WorldEntity
    3537{
     
    4951        if (!m_ready)
    5052        {
    51             m_shader = Shader::Create(
    52 #if !defined __CELLOS_LV2__ && !defined _XBOX && !defined USE_D3D9
    53                 "#version 120\n"
    54                 "attribute vec2 in_Position;"
    55                 "void main(void) {"
    56                 "    gl_Position = vec4(in_Position, 0.0, 1.0);"
    57                 "}",
    58 
    59                 "#version 120\n"
    60                 "void main(void) {"
    61                 "    gl_FragColor = vec4(0.7, 0.2, 0.5, 1.0);"
    62                 "}"
    63 #else
    64                 "void main(float2 in_Position : POSITION,"
    65                 "          out float4 out_Position : POSITION) {"
    66                 "    out_Position = float4(in_Position, 0.0, 1.0);"
    67                 "}",
    68 
    69                 "void main(out float4 out_FragColor : COLOR) {"
    70                 "    out_FragColor = float4(0.7, 0.2, 0.5, 1.0);"
    71                 "}"
    72 #endif
    73             );
     53            m_shader = Shader::Create(lolfx_01_triangle);
    7454            m_coord = m_shader->GetAttribLocation("in_Position", VertexUsage::Position, 0);
    7555
  • trunk/test/tutorial/Makefile.am

    r1291 r1385  
    1111             $(noinst_PROGRAMS:%$(EXEEXT)=%.exe)
    1212
     13SUFFIXES = .lolfx
     14%.lolfx.cpp: %.lolfx
     15        echo "/* This file was autogenerated. DO NOT MODIFY IT. */" > $@.tmp
     16        echo "char const *lolfx_$(notdir $(^:%.lolfx=%)) =" >> $@.tmp
     17        $(SED) 's/"/\\"/g' $^ | $(SED) 's/.*/"&\\n"/' >> $@.tmp
     18        echo ";" >> $@.tmp
     19        mv $@.tmp $@
     20
    1321noinst_PROGRAMS = 01_triangle 02_cube 03_fractal
    1422
    152301_triangle_SOURCES = 01_triangle.cpp
     24nodist_01_triangle_SOURCES = 01_triangle.lolfx.cpp
    162501_triangle_CPPFLAGS = @LOL_CFLAGS@ @PIPI_CFLAGS@
    172601_triangle_LDFLAGS = $(top_builddir)/src/liblol.a @LOL_LIBS@ @PIPI_LIBS@
  • trunk/win32/01_triangle.vcxproj

    r1380 r1385  
    3131  </ItemGroup>
    3232  <ItemGroup>
     33    <LolFxCompile Include="..\test\tutorial\01_triangle.lolfx" />
     34  </ItemGroup>
     35  <ItemGroup>
    3336    <ProjectReference Include="lolcore.vcxproj">
    3437      <Project>{9e62f2fe-3408-4eae-8238-fd84238ceeda}</Project>
Note: See TracChangeset for help on using the changeset viewer.