Ejemplo n.º 1
0
	GLuint Shader::Load(const String& vertSrc, const String& fragSrc)
	{
		const char* vertexSource = vertSrc.c_str();
		const char* fragmentSource = fragSrc.c_str();

		GLuint program = glCreateProgram();
		GLuint vertex = glCreateShader(GL_VERTEX_SHADER);
		GLuint fragment = glCreateShader(GL_FRAGMENT_SHADER);

		glShaderSource(vertex, 1, &vertexSource, NULL);
		glCompileShader(vertex);

		GLint result;
		glGetShaderiv(vertex, GL_COMPILE_STATUS, &result);
		if (result == GL_FALSE)
		{
			GLint length;
			glGetShaderiv(vertex, GL_INFO_LOG_LENGTH, &length);
			std::vector<char> error(length);
			glGetShaderInfoLog(vertex, length, &length, &error[0]);
			SP_ERROR("Failed to compile vertex shader!");
			SP_ERROR(&error[0]);
			SP_ASSERT(false, "Failed to compile vertex shader!");
			glDeleteShader(vertex);
			return 0;
		}

		glShaderSource(fragment, 1, &fragmentSource, NULL);
		glCompileShader(fragment);

		glGetShaderiv(fragment, GL_COMPILE_STATUS, &result);
		if (result == GL_FALSE)
		{
			GLint length;
			glGetShaderiv(fragment, GL_INFO_LOG_LENGTH, &length);
			std::vector<char> error(length);
			glGetShaderInfoLog(fragment, length, &length, &error[0]);
			SP_ERROR("Failed to compile fragment shader!");
			SP_ERROR(&error[0]);
			SP_ASSERT(false, "Failed to compile fragment shader!");
			glDeleteShader(fragment);
			return 0;
		}

		glAttachShader(program, vertex);
		glAttachShader(program, fragment);

		glLinkProgram(program);
		glValidateProgram(program);

		glDeleteShader(vertex);
		glDeleteShader(fragment);

		return program;
	}
Ejemplo n.º 2
0
	GLint Shader::GetUniformLocation(const String& name)
	{
		GLint result = glGetUniformLocation(m_ShaderID, name.c_str());
		if (result == -1)
			SP_ERROR(m_Name, ": could not find uniform ", name, " in shader!");

		return result;
	}
Ejemplo n.º 3
0
bool log_gl_call(const char* function, const char* file, int line)
{
	GLenum error = glGetError();
	if (error != GL_NO_ERROR)
	{
		SP_ERROR("[OpenGL Error] (", error, "): ", function, " ", file, ":", line);
		return false;
	}
	return true;
}
Ejemplo n.º 4
0
	void Shader::SetUniform(const String& name, byte* data)
	{
		ShaderUniformDeclaration* uniform = FindUniformDeclaration(name);
		if (!uniform)
		{
			SP_ERROR("Cannot find uniform in ", m_Name, " shader with name '", name, "'");
			return;
		}
		ResolveAndSetUniform(uniform, data, 0);
	}
Ejemplo n.º 5
0
//-----------------------------------------------------------------------------
axiom_node_t *
sp_make_MTOM_node20(
    const axutil_env_t *env,
    axutil_stream_t    *st,
    char               *header_blob,
    axis2_char_t       *el_name,
    axis2_char_t       *content_type,
    axis2_char_t       *ns_prefix,
    axis2_char_t       *ns_uri)
{
	axiom_node_t         *resp_om_node = NULL;

    int data_len = 0;
    char *bin_data = sp_load_binary_file(env, header_blob, st,  &data_len);

    if (NULL == bin_data)
    {
    	SP_ERROR(env, SP_USER_ERR_DATA_LOAD);
    }
    else
    {
    	axiom_element_t      *resp_om_ele  = NULL;
        axiom_data_handler_t *data_handler = NULL;
        axiom_node_t         *data_om_node = NULL;
        axiom_text_t            *data_text = NULL;

    	axiom_namespace_t *ns = axiom_namespace_create(env, ns_uri, ns_prefix);
    	resp_om_ele =
    			axiom_element_create (env, NULL, el_name, ns, &resp_om_node);
        data_handler =
        		axiom_data_handler_create(env, NULL, content_type);
        axiom_data_handler_set_binary_data
            (data_handler, env, bin_data, data_len);
        data_text =
          axiom_text_create_with_data_handler
          (env, resp_om_node, data_handler, &data_om_node);
        axiom_text_set_optimize(data_text, env, AXIS2_TRUE);
    }

    // Note:  The buffer 'bin_data' gets freed when
    //        axiom_data_handler_free is called, and it in turn gets called
    //        from axiom_text_free.
    //        That should get called when the resp_om_node gets freed.
    //        Hopefully the service framework does this at some point.

    return resp_om_node;
}
Ejemplo n.º 6
0
	void ShaderManager::Reload(const String& name)
	{
		for (uint i = 0; i < s_Shaders.size(); i++)
		{
			if (s_Shaders[i]->GetName() == name)
			{
				String path = s_Shaders[i]->GetFilePath();
				String error;
				if (!API::Shader::TryCompileFromFile(path, error))
				{
					SP_ERROR(error);
				}
				else
				{
					s_Shaders[i]->~Shader();
					s_Shaders[i] = API::Shader::CreateFromFile(name, path, s_Shaders[i]);
					SP_INFO("Reloaded shader: " + name);
				}
				return;
			}
		}
		SP_WARN("Could not find '", name, "' shader to reload.");
	}
Ejemplo n.º 7
0
//-----------------------------------------------------------------------------
axiom_node_t *
sp_build_response20(
    const axutil_env_t *env,
    const sp_props     *props,
    axutil_stream_t    *st)
{
    char tmpBuf[255];
    axiom_node_t *return_node = NULL;

    hh_values hh;
    sp_initHttpHeaderStruct(&hh);

    char header_buf[2560];
    if (sp_load_header_blob(env, st, header_buf, 2560) < 0)
    {
    	// TODO:  Could allocate a bigger buffer, copy chars, etc.
    	// In practice we never expect the headers to be that big, or if
    	//  it does come up then something is wrong.
        SP_ERROR(env, SP_USER_ERR_CONTENTHEADERS);
        return NULL;
    }
    sp_parseHttpHeaders_buf(env, &hh, header_buf);

    char *contentTypeStr = hh.values[SP_HH_CONTENTTYPE];
    if ( NULL == contentTypeStr)
    {
        sp_freeHttpHeaders(env, &hh);
        SP_ERROR(env, SP_USER_ERR_CONTENTHEADERS);
        return NULL;
    }
    switch(rp_get_contentType(contentTypeStr))
    {
    case SP_RESP_XML_TYPE:
    case SP_RESP_APP_SEXML_TYPE:
        return_node =  sp_process_xml_st(env, st, NULL);
        break;

    case SP_RESP_MIXED_TYPE:
    	// A mixed type response generally signifies a coverage response.
    	// TODO:  check that we really do have a coverage!
        return_node =  sp_process_coverage20(env, contentTypeStr, st);
        break;

    case SP_RESP_TIFF_TYPE:
        return_node =  sp_process_tiff20(env, st, &hh);
        break;

    default:
    	SP_ERROR(env, SP_USER_ERR_CONTENTTYPE);
    	rp_log_error(env,
    			"*** S2P(%s:%d): Unrecognised Content-type: %s\n",
    			__FILE__, __LINE__,
    			contentTypeStr);
    	if (rp_getDebugMode(env, props))
    	{
    		sp_dump_bad_content(env, contentTypeStr, st, header_buf);
    	}
    }

    sp_freeHttpHeaders(env, &hh);
    return return_node;

}