ErekT's Forum Posts

  • Hmm. I get this error from the line "gl_FragColor = mix(gl_FragColor, color);":

    'mix': no matching overloaded function found.

    'assign': cannot convert from 'const float' to 'Fragcolor mediump 4-component vector of float'

    Any shader-experts out there who knows what's going on?

    Here's the full shader code:

    /////////////////////////////////////////////////////////
    // FXAA effect
    
    #ifndef FXAA_REDUCE_MIN
        #define FXAA_REDUCE_MIN   (1.0/ 128.0)
    #endif
    #ifndef FXAA_REDUCE_MUL
        #define FXAA_REDUCE_MUL   (1.0 / 8.0)
    #endif
    #ifndef FXAA_SPAN_MAX
        #define FXAA_SPAN_MAX     8.0
    #endif
    
    precision mediump float;
    
    varying mediump vec2 vTex;
    uniform lowp sampler2D samplerFront;
    uniform lowp sampler2D samplerBack;
    uniform mediump vec2 destStart;
    uniform mediump vec2 destEnd;
    
    uniform highp float WindowWidth;
    uniform highp float WindowHeight;
    
    void main(void)
    {
        lowp vec4 front = texture2D(samplerFront, vTex);
        lowp vec4 back = texture2D(samplerBack, mix(destStart, destEnd, vTex));
    
        vec2 v_rgbNW;
        vec2 v_rgbNE;
        vec2 v_rgbSW;
        vec2 v_rgbSE;
        vec2 v_rgbM;
    
        vec4 color;
        mediump vec2 inverseVP = vec2(1.0 / WindowWidth, 1.0 / WindowHeight);
        vec3 rgbNW = texture2D(samplerFront, v_rgbNW).xyz;
        vec3 rgbNE = texture2D(samplerFront, v_rgbNE).xyz;
        vec3 rgbSW = texture2D(samplerFront, v_rgbSW).xyz;
        vec3 rgbSE = texture2D(samplerFront, v_rgbSE).xyz;
        vec4 texColor = texture2D(samplerFront, v_rgbM);
        vec3 rgbM  = texColor.xyz;
        vec3 luma = vec3(0.299, 0.587, 0.114);
        float lumaNW = dot(rgbNW, luma);
        float lumaNE = dot(rgbNE, luma);
        float lumaSW = dot(rgbSW, luma);
        float lumaSE = dot(rgbSE, luma);
        float lumaM  = dot(rgbM,  luma);
        float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
        float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
        
        mediump vec2 dir;
        dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
        dir.y =  ((lumaNW + lumaSW) - (lumaNE + lumaSE));
        
        float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *
                              (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);
        
        float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);
        dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),
                  max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),
                  dir * rcpDirMin)) * inverseVP;
        
        vec3 rgbA = 0.5 * ( 
    	texture2D(samplerFront, vTex * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +
            texture2D(samplerFront, vTex * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);
        vec3 rgbB = rgbA * 0.5 + 0.25 * (
            texture2D(samplerFront, vTex * inverseVP + dir * -0.5).xyz +
            texture2D(samplerFront, vTex * inverseVP + dir * 0.5).xyz);
    
        float lumaB = dot(rgbB, luma);
        if ((lumaB < lumaMin) || (lumaB > lumaMax))
            color = vec4(rgbA, texColor.a);
        else
            color = vec4(rgbB, texColor.a);
    
        gl_FragColor = mix(gl_FragColor, color);
    }
    [/code:3gbyn4a7]
  • Okay I see. Thanks for the pointers

    I have been sniffing around the various shaders that come with C2 and an FXAA shader I found on the net, and I'm starting to get an idea of what's what. I tried converting an FXAA shader I found on the net but get greeted with this error straight off the bat:

    Error reading XML file

    Unknown effect parameter type

    Line 36, column 9

    Element c2effect \ parameters \ param

    ... which is very strange since the XML is basically a straight copy/paste job from an existing effect. Man this isn't very confidence-building :/

    XML:

    <?xml version="1.0" encoding="UTF-8" ?>
    <c2effect>
    	<!-- About -->
    	<id>fxaa</id>			<!-- Never change the ID.  Change the name instead -->
    	<name>FXAA</name>
    	<category>Blend</category>
    	<description>Apply FX antialiasing.</description>
    	<author>ErekT</author>
    	
    	<!-- Settings -->
    	
    	<!-- Extend the bounding box for effect processing by a number of pixels to show the edges
    		 of effects which go beyond the object edges, e.g. blur and warp. -->
    	<extend-box-horizontal>0</extend-box-horizontal>
    	<extend-box-vertical>0</extend-box-vertical>
    	
    	<!-- Set to true if the background is sampled (samplerBack is referenced at all in the shader) -->
    	<blends-background>true</blends-background>
    	
    	<!-- Set to true if the background is not sampled at 1:1 with the foreground (e.g. the
    		 background texture co-ordinates are modified in some way by the shader, as done
    		 by Glass and Lens) -->
    	<cross-sampling>false</cross-sampling>
    	
    	<!-- Set to true if the shader does not modify the opaque areas of the foreground. In other words
    		 any opaque pixels in the original image are output in the same position and still fully opaque.
    		 This is used to optimise the front-to-back renderer's depth pass, since it can still write depth
    		 and skip overdraw for any objects using only shaders which preserve opaqueness. -->
    	<preserves-opaqueness>false</preserves-opaqueness>
    	
    	<!-- Set to true if the effect changes over time, e.g. Noise or Warp effects. -->
    	<animated>false</animated>
    	
    	<!-- Parameters -->
    	<parameters>
    		<param>
    			<name>Width</name>
    			<description>Game resolution X</description>
    			<type>int</type>
    			<initial>0</initial>
    			<uniform>WindowWidth</uniform>
    		</param>
    		<param>
    			<name>Height</name>
    			<description>Game resolution Y</description>
    			<type>int</type>
    			<initial>0</initial>
    			<uniform>WindowHeight</uniform>
    		</param>
    	</parameters>
    </c2effect>
    
    [/code:rmnp6ym2]
    
    The shader itself:
    [code:rmnp6ym2]
    /////////////////////////////////////////////////////////
    // FXAA effect
    
    varying mediump vec2 vTex;
    uniform lowp sampler2D samplerFront;
    uniform lowp sampler2D samplerBack;
    uniform mediump vec2 destStart;
    uniform mediump vec2 destEnd;
    
    //uniform lowp sampler2D tex;
    //uniform mediump vec2 fragCoord;
    uniform highp int WindowWidth;
    uniform highp int WindowHeight;
    
    void main(void)
    {
    	lowp vec4 front = texture2D(samplerFront, vTex);
    	lowp vec4 back = texture2D(samplerBack, mix(destStart, destEnd, vTex));
    
                vec2 v_rgbNW, vec2 v_rgbNE, 
                vec2 v_rgbSW, vec2 v_rgbSE, 
                vec2 v_rgbM) {
        vec4 color;
        mediump vec2 inverseVP = vec2(1.0 / WindowWidth, 1.0 / WindowHeight);
        vec3 rgbNW = texture2D(samplerFront, v_rgbNW).xyz;
        vec3 rgbNE = texture2D(samplerFront, v_rgbNE).xyz;
        vec3 rgbSW = texture2D(samplerFront, v_rgbSW).xyz;
        vec3 rgbSE = texture2D(samplerFront, v_rgbSE).xyz;
        vec4 texColor = texture2D(samplerFront, v_rgbM);
        vec3 rgbM  = texColor.xyz;
        vec3 luma = vec3(0.299, 0.587, 0.114);
        float lumaNW = dot(rgbNW, luma);
        float lumaNE = dot(rgbNE, luma);
        float lumaSW = dot(rgbSW, luma);
        float lumaSE = dot(rgbSE, luma);
        float lumaM  = dot(rgbM,  luma);
        float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
        float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
        
        mediump vec2 dir;
        dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
        dir.y =  ((lumaNW + lumaSW) - (lumaNE + lumaSE));
        
        float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *
                              (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);
        
        float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);
        dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),
                  max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),
                  dir * rcpDirMin)) * inverseVP;
        
        vec3 rgbA = 0.5 * ( 
    	texture2D(samplerFront, vTex * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +
            texture2D(samplerFront, vTex * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);
        vec3 rgbB = rgbA * 0.5 + 0.25 * (
            texture2D(samplerFront, vTex * inverseVP + dir * -0.5).xyz +
            texture2D(samplerFront, vTex * inverseVP + dir * 0.5).xyz);
    
        float lumaB = dot(rgbB, luma);
        if ((lumaB < lumaMin) || (lumaB > lumaMax))
            color = vec4(rgbA, texColor.a);
        else
            color = vec4(rgbB, texColor.a);
    
        gl_FragColor = mix(gl_FragColor, color);
    }
    [/code:rmnp6ym2]
    
    EDIT:
    Seems 'int' isn't acceptable syntax so I replaced it with a float for now.
  • Cool, thanks I'll check those out.

  • Just a quick question about shaders in C2. I don't know much about the workings of shaders in general, and C2 even less. The way they're programmed... it's all a bit frightening So I'll probably try to hire someone to write what I need, but first I need to know if what I'm thinking of is possible with C2's render pipeline.

    So here goes: I want to take what's rendered on screen, modify it with an interpolation filter, and then render the result to a texture/sprite/somesuch while leaving the original screen render unmodified. Then I want to overlay the result onto the screen so I can adjust how much it blends with opacity. Is that something that can be accomplished in C2 with a shader?

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • Limiting to just HTML5 is Construct 2/3 downfall. The fact that you still encounter framedrops in a bigger 2D game on an integrated graphics card that can play commercial AAA games at least at low settings says a lot.

    It is indeed. I've done some testing recently and as it turns out, even my puny netbook from 2009 can run Unity stuff at 60 fps. Compatibility doesn't get better than that.

    It really is too bad, cos C2 wipes the floor with any other product I've tried in terms of productivity. If Scirra is sticking to html5 so they can continue supporting mobile platforms then I'd say all the more reason for them to reconsider. C2/html5 never seemed to manage to perform well on Android and iOS anyway and the mobile gold rush is pretty much over.

  • I'm getting desperate here... This jaggyness issue and the ridicilous memory consumption of the engine's making me fear for the game's chance on the market.

    Sorry to hear that. It's a spectacular-looking game. Have you tried sending the project to Ashley and let him look at it? It sounds like it could be some kind of memory leak.

  • Acer Aspire E5(?) with i5 2.66ghz and intel iris 6100. There's been no performance issues with C2 that I've seen.

  • Nice, congrats! And thanks for adding adjustable scanlines

  • Ooh nice! I'll have to check this out

  • You can get around that, somewhat, if you use low quality and a higher layout scale. 2x and even 3x layout scale for a 320x240 res game should be fine for most integrated chips at least.

    Here's a screenie of my game with the TV filter:

    https://dl.dropboxusercontent.com/u/705 ... ercent.png

    And without it:

    https://dl.dropboxusercontent.com/u/705 ... _point.png

    vortexstudios:

    How about an option to control the strength/alpha of the scanlines as well? Just an idea, the effect is great as-is too <img src="{SMILIES_PATH}/icon_e_wink.gif" alt=";)" title="Wink">

  • I picked up a copy now and tried it for a bit. Very good stuff Fast and authentic-looking. The only thing I miss is an option to turn the scanlines completely off.

  • Nice! I'll definitely pick this up.

    Today, all that is good is paid.

    Fair game man. People gotta eat.

  • Best go regular imo.

    How does the steam version make things easier btw?

  • Glad you found it useful

  • Dodgy drivers, suspect privacy settings, forced updates... Windows 10 seems to me like a proper horror show. I'd seriously consider downgrading if I was you