Help us understand the problem. What is going on with this article?

ofShader.cppのデフォルト・アトリービュートメモ

More than 3 years have passed since last update.

OpenframeworksでGLSLの3.0以上を使うとき、レイアウトをマジで毎回忘れるのでメモ
(0.9.8@visualStudio 2015で確認)

0 = POSITION_ATTRIBUTE
1 = COLOR_ATTRIBUTE
2 = NORMAL_ATTRIBUTE
3 = TEXCOORD_ATTRIBUTE

上記の順番で取り込まれるので、うまくLayoutを確認してみること。
ofShader.cppで下記のような書き方されてる。

ofShader.cpp
bool ofShader::bindDefaults() const{
    if(shaders.empty()) {
        ofLogError("ofShader") << "bindDefaults(): trying to link GLSL program, but no shaders created yet";
        return false;
    } else {
        bindAttribute(ofShader::POSITION_ATTRIBUTE,::POSITION_ATTRIBUTE);
        bindAttribute(ofShader::COLOR_ATTRIBUTE,::COLOR_ATTRIBUTE);
        bindAttribute(ofShader::NORMAL_ATTRIBUTE,::NORMAL_ATTRIBUTE);
        bindAttribute(ofShader::TEXCOORD_ATTRIBUTE,::TEXCOORD_ATTRIBUTE);
        return true;
    }

}

テッセレーションとかは0.9.8では未実装の模様。
使いたい場合は自分で書くこと。

ofShader.cpp
string ofShader::nameForType(GLenum type){
    switch(type) {
        case GL_VERTEX_SHADER: return "GL_VERTEX_SHADER";
        case GL_FRAGMENT_SHADER: return "GL_FRAGMENT_SHADER";
        #ifndef TARGET_OPENGLES
        case GL_GEOMETRY_SHADER_EXT: return "GL_GEOMETRY_SHADER_EXT";
        #ifdef glDispatchCompute
        case GL_COMPUTE_SHADER: return "GL_COMPUTE_SHADER";
        #endif
        #endif
        default: return "UNKNOWN SHADER TYPE";
    }
}

ofGLProgrammableRenderer.cpp
の中にマトリックス関係。
ダウンロードしてきたコードが動かないとかの時は、先頭文字が大文字になってるとかありがち。

ofGLProgrammableRenderer.cpp
static const string VIEW_MATRIX_UNIFORM="viewMatrix";
static const string MODELVIEW_MATRIX_UNIFORM="modelViewMatrix";
static const string PROJECTION_MATRIX_UNIFORM="projectionMatrix";
static const string MODELVIEW_PROJECTION_MATRIX_UNIFORM="modelViewProjectionMatrix";
static const string TEXTURE_MATRIX_UNIFORM="textureMatrix";
static const string COLOR_UNIFORM="globalColor";

ofShaderとは関係ないけどブレンドモードの中身も同じcpp内に記述してある。うっかり忘れがちなのでメモ。

ofGLProgrammableRenderer.cpp
void ofGLProgrammableRenderer::setBlendMode(ofBlendMode blendMode){
    switch (blendMode){
        case OF_BLENDMODE_DISABLED:
            glDisable(GL_BLEND);
            break;

        case OF_BLENDMODE_ALPHA:
            glEnable(GL_BLEND);
            glBlendEquation(GL_FUNC_ADD);
            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
            break;

        case OF_BLENDMODE_ADD:
            glEnable(GL_BLEND);
            glBlendEquation(GL_FUNC_ADD);
            glBlendFunc(GL_SRC_ALPHA, GL_ONE);
            break;

        case OF_BLENDMODE_MULTIPLY:
            glEnable(GL_BLEND);
            glBlendEquation(GL_FUNC_ADD);
            glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA /* GL_ZERO or GL_ONE_MINUS_SRC_ALPHA */);
            break;

        case OF_BLENDMODE_SCREEN:
            glEnable(GL_BLEND);
            glBlendEquation(GL_FUNC_ADD);
            glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE);
            break;

        case OF_BLENDMODE_SUBTRACT:
            glEnable(GL_BLEND);
            glBlendEquation(GL_FUNC_REVERSE_SUBTRACT);
            glBlendFunc(GL_SRC_ALPHA, GL_ONE);
            break;

        default:
            break;
    }
    currentStyle.blendingMode = blendMode;
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away