コード例 #1
0
ファイル: cogl-program.c プロジェクト: spatulasnout/cogl
void
cogl_program_attach_shader (CoglHandle program_handle,
                            CoglHandle shader_handle)
{
  CoglProgram *program;
  CoglShader *shader;

  _COGL_GET_CONTEXT (ctx, NO_RETVAL);

  if (!cogl_is_program (program_handle) || !cogl_is_shader (shader_handle))
    return;

  program = _cogl_program_pointer_from_handle (program_handle);
  shader = _cogl_shader_pointer_from_handle (shader_handle);

  /* Only one shader is allowed if the type is ARBfp */
  if (shader->language == COGL_SHADER_LANGUAGE_ARBFP)
    g_return_if_fail (program->attached_shaders == NULL);
  else if (shader->language == COGL_SHADER_LANGUAGE_GLSL)
    g_return_if_fail (_cogl_program_get_language (program) ==
                      COGL_SHADER_LANGUAGE_GLSL);

  program->attached_shaders
    = g_slist_prepend (program->attached_shaders,
                       cogl_handle_ref (shader_handle));

  program->age++;
}
コード例 #2
0
ファイル: cogl-shader.c プロジェクト: Docworld/chromiumos
CoglShaderType
cogl_shader_get_type (CoglHandle  handle)
{
  GLint type;
  CoglShader *shader;

  if (!cogl_is_shader (handle))
    {
      g_warning ("Non shader handle type passed to cogl_shader_get_type");
      return COGL_SHADER_TYPE_VERTEX;
    }

  shader = _cogl_shader_pointer_from_handle (handle);

  GE (glGetShaderiv (shader->gl_handle, GL_SHADER_TYPE, &type));
  if (type == GL_VERTEX_SHADER)
    return COGL_SHADER_TYPE_VERTEX;
  else if (type == GL_FRAGMENT_SHADER)
    return COGL_SHADER_TYPE_VERTEX;
  else
    {
      g_warning ("Unexpected shader type 0x%08lX", (unsigned long)type);
      return COGL_SHADER_TYPE_VERTEX;
    }
}
コード例 #3
0
void
cogl_shader_compile (CoglHandle handle)
{
    CoglShader *shader;
    _COGL_GET_CONTEXT (ctx, NO_RETVAL);

    if (!cogl_is_shader (handle))
        return;

    shader = _cogl_shader_pointer_from_handle (handle);

    glCompileShaderARB (shader->gl_handle);
}
コード例 #4
0
void
cogl_shader_source (CoglHandle   handle,
                    const gchar *source)
{
    CoglShader *shader;
    _COGL_GET_CONTEXT (ctx, NO_RETVAL);

    if (!cogl_is_shader (handle))
        return;

    shader = _cogl_shader_pointer_from_handle (handle);

    glShaderSourceARB (shader->gl_handle, 1, &source, NULL);
}
コード例 #5
0
void
cogl_shader_get_parameteriv (CoglHandle  handle,
                             COGLenum    pname,
                             COGLint    *dest)
{
    CoglShader *shader;
    _COGL_GET_CONTEXT (ctx, NO_RETVAL);

    if (!cogl_is_shader (handle))
        return;

    shader = _cogl_shader_pointer_from_handle (handle);

    glGetObjectParameterivARB (shader->gl_handle, pname, dest);
}
コード例 #6
0
ファイル: cogl-program.c プロジェクト: gramozeka/GSB-NEW
void
cogl_program_attach_shader (CoglHandle program_handle,
                            CoglHandle shader_handle)
{
  CoglProgram *program;
  CoglShader *shader;

  _COGL_GET_CONTEXT (ctx, NO_RETVAL);

  if (!cogl_is_program (program_handle) || !cogl_is_shader (shader_handle))
    return;

  program = _cogl_program_pointer_from_handle (program_handle);
  shader = _cogl_shader_pointer_from_handle (shader_handle);

  glAttachObject (program->gl_handle, shader->gl_handle);
}
コード例 #7
0
void
cogl_shader_get_info_log (CoglHandle  handle,
                          guint       size,
                          gchar      *buffer)
{
    CoglShader *shader;
    COGLint len;
    _COGL_GET_CONTEXT (ctx, NO_RETVAL);

    if (!cogl_is_shader (handle))
        return;

    shader = _cogl_shader_pointer_from_handle (handle);

    glGetInfoLogARB (shader->gl_handle, size-1, &len, buffer);
    buffer[len]='\0';
}
コード例 #8
0
ファイル: cogl-shader.c プロジェクト: Docworld/chromiumos
gboolean
cogl_shader_is_compiled (CoglHandle handle)
{
  GLint status;
  CoglShader *shader;

  if (!cogl_is_shader (handle))
    return FALSE;

  shader = _cogl_shader_pointer_from_handle (handle);

  GE (glGetShaderiv (shader->gl_handle, GL_COMPILE_STATUS, &status));
  if (status == GL_TRUE)
    return TRUE;
  else
    return FALSE;
}
コード例 #9
0
ファイル: cogl-shader.c プロジェクト: Docworld/chromiumos
gchar *
cogl_shader_get_info_log (CoglHandle handle)
{
  CoglShader *shader;
  char buffer[512];
  int len = 0;
  _COGL_GET_CONTEXT (ctx, NULL);

  if (!cogl_is_shader (handle))
    return NULL;

  shader = _cogl_shader_pointer_from_handle (handle);

  glGetShaderInfoLog (shader->gl_handle, 511, &len, buffer);
  buffer[len] = '\0';

  return g_strdup (buffer);
}