Пример #1
0
void GraphicsContext3D::getShaderiv(Platform3DObject shader, GC3Denum pname, GC3Dint* value)
{
    ASSERT(shader);

    makeContextCurrent();

    HashMap<Platform3DObject, ShaderSourceEntry>::iterator result = m_shaderSourceMap.find(shader);
    
    switch (pname) {
    case DELETE_STATUS:
    case SHADER_TYPE:
        ::glGetShaderiv(shader, pname, value);
        break;
    case COMPILE_STATUS:
        if (result == m_shaderSourceMap.end()) {
            *value = static_cast<int>(false);
            return;
        }
        *value = static_cast<int>(result->second.isValid);
        break;
    case INFO_LOG_LENGTH:
        if (result == m_shaderSourceMap.end()) {
            *value = 0;
            return;
        }
        *value = getShaderInfoLog(shader).length();
        break;
    case SHADER_SOURCE_LENGTH:
        *value = getShaderSource(shader).length();
        break;
    default:
        synthesizeGLError(INVALID_ENUM);
    }
}
Пример #2
0
//! Creates a shader object of given type from given source file
void Shader::addShader(shaderType type, const char * const file)
{
	//create shader
	GLuint shader;
	if((shader = glCreateShader(type)) == 0)
	{
		checkOpenGLError();
		throw std::runtime_error("Unable to create shader.");
	}

	//load source
	std::string source;
	source = loadFile(file);

	//add source to shader object
	const char* s = source.c_str();
	glShaderSource(shader, 1, &s, NULL);

	//compile
	glCompileShader(shader);
	//check status
	int compileStatus;
	glGetShaderiv(shader, GL_COMPILE_STATUS, &compileStatus);
	if(compileStatus != GL_TRUE)
	{
		std::cerr << getShaderInfoLog(shader) << std::endl;
		throw std::runtime_error("Unable to compile shader.");
	}

	//attach to program
	glAttachShader(id, shader);
}
Пример #3
0
std::string 
VSShaderLib::getAllInfoLogs() {

	std::string s;

	for (int i = 0; i < VSShaderLib::COUNT_SHADER_TYPE; ++i) {
		if (pShader[i]) {
			getShaderInfoLog((VSShaderLib::ShaderType)i);
			s.append(VSShaderLib::spStringShaderTypes[i]);
			s.append(": ");
			s.append(pResult);
			s.append("\n");
			//s += VSShaderLib::spStringShaderTypes[i] + ": " + pResult + "\n";
		}
	}

	if (pProgram) {
		getProgramInfoLog();
		s += "Program: " + pResult;
		if (isProgramValid())
			s += " - Valid\n";
		else
			s += " - Not Valid\n";
	}

	pResult = s;
	return pResult;
}
Пример #4
0
GLuint compileShader(GLenum type, const char *source)
{
  /* create shader object */
  GLuint shader = glCreateShader(type);
  if (shader == 0)
  {
    std::cerr << "Failed to create shader object: "
              << errorToStr(glGetError())
              << std::endl;
    return 0;
  }

  /* copy the sources to the shader object */
  glShaderSource(shader, 1, &source, NULL);

  /* compile the sources */
  glCompileShader(shader);

  /* query compilation status */
  GLint status = GL_FALSE;
  glGetShaderiv(shader, GL_COMPILE_STATUS, &status);

  /* print compilation log */
  std::cerr << "Compilation status: " << (status == GL_TRUE ? "succeeded" : "failed") << std::endl;
  std::cerr << getShaderInfoLog(shader) << std::endl;

  /* check compilation status */
  if (status == GL_FALSE)
  {
    glDeleteShader(shader);
    return 0;
  }

  return shader;
}
Пример #5
0
GLuint compileShader(const GLenum type, const char * source)
{
    GLuint shader = glCreateShader(type);
    if(shader == 0) throw GL_Exception("glCreateShader failed");

    glShaderSource(shader, 1, &source, NULL);
    glCompileShader(shader);

    std::cout << getShaderInfoLog(shader);

    int compileStatus;
    glGetShaderiv(shader, GL_COMPILE_STATUS, &compileStatus);
    if(compileStatus == GL_FALSE) throw std::runtime_error("shader compilation failed");

    return shader;
}
Пример #6
0
bool ShaderProgram::attachShader(GLenum type, const char *source, GLuint *shader_id)
{
  assert(glIsProgram(m_program));

  /* create shader object */
  GLuint shader = glCreateShader(type);
  if (shader == 0)
  {
    ERROR("Failed to create shader object: " << errorToStr(glGetError()));
    return false;
  }

  /* copy the sources to the shader object */
  glShaderSource(shader, 1, &source, NULL);

  /* compile the sources */
  glCompileShader(shader);

  /* query compilation status */
  GLint status = GL_FALSE;
  glGetShaderiv(shader, GL_COMPILE_STATUS, &status);

  /* print compilation log */
  std::cerr << "Compilation status: " << (status == GL_TRUE ? "succeeded" : "failed") << std::endl;
  std::cerr << getShaderInfoLog(shader) << std::endl;

  /* check compilation status */
  if (status == GL_FALSE)
  {
    glDeleteShader(shader);
    return false;
  }

  /* attach the shader to program */
  glAttachShader(m_program, shader);

  if (shader_id == nullptr)
  {
    glDeleteShader(shader);
  }
  else
  {
    *shader_id = shader;
  }

  return true;
}
Пример #7
0
    GLuint Shader::compile(GLuint shaderType, const char* shaderCode)
    {
        if(shaderType != GL_VERTEX_SHADER &&
                shaderType != GL_FRAGMENT_SHADER &&
                shaderType != GL_GEOMETRY_SHADER &&
                shaderType != GL_TESS_CONTROL_SHADER &&
                shaderType != GL_TESS_EVALUATION_SHADER)
            return 0;

        GLuint shader = glCreateShader(shaderType);
        glShaderSource(shader, 1, &shaderCode, NULL);
        glCompileShader(shader);

        // Error checking.
        GLint compiled;
        glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled);

        if(!compiled) {
            std::cerr << getShaderInfoLog(shader) << std::endl;
            return false;
        }

        return shader;
    }