Exemplo n.º 1
0
DBool sfShader_loadFromStream(sfShader* shader, DStream* vertexShaderStream, DStream* fragmentShaderStream)
{
    bool success = false;

    if (vertexShaderStream || fragmentShaderStream)
    {
        if (!vertexShaderStream)
        {
            // fragment shader only
            sfmlStream stream(fragmentShaderStream);
            success = shader->This.loadFromStream(stream, sf::Shader::Fragment);
        }
        else if (!fragmentShaderStream)
        {
            // vertex shader only
            sfmlStream stream(vertexShaderStream);
            success = shader->This.loadFromStream(stream, sf::Shader::Vertex);
        }
        else
        {
            // vertex + fragment shaders
            sfmlStream vertexStream(vertexShaderStream);
            sfmlStream fragmentStream(fragmentShaderStream);
            success = shader->This.loadFromStream(vertexStream, fragmentStream);
        }
    }

    return success?DTrue:DFalse;
}
Exemplo n.º 2
0
sfShader* sfShader_createFromStream(sfInputStream* vertexShaderStream, sfInputStream* geometryShaderStream, sfInputStream* fragmentShaderStream)
{
    bool success = false;
    sfShader* shader = new sfShader;
    if (vertexShaderStream || geometryShaderStream || fragmentShaderStream)
    {
        if (!geometryShaderStream)
        {
            if (!vertexShaderStream)
            {
                // fragment shader only
                CallbackStream stream(fragmentShaderStream);
                success = shader->This.loadFromStream(stream, sf::Shader::Fragment);
            }
            else if (!fragmentShaderStream)
            {
                // vertex shader only
                CallbackStream stream(vertexShaderStream);
                success = shader->This.loadFromStream(stream, sf::Shader::Vertex);
            }
            else
            {
                // vertex + fragment shaders
                CallbackStream vertexStream(vertexShaderStream);
                CallbackStream fragmentStream(fragmentShaderStream);
                success = shader->This.loadFromStream(vertexStream, fragmentStream);
            }
        }
        else
        {
            // vertex + geometry + fragment shaders
            CallbackStream vertexStream(vertexShaderStream);
            CallbackStream geometryStream(geometryShaderStream);
            CallbackStream fragmentStream(fragmentShaderStream);
            success = shader->This.loadFromStream(vertexStream, geometryStream, fragmentStream);
        }
    }

    if (!success)
    {
        delete shader;
        shader = NULL;
    }

    return shader;
}