Ejemplo n.º 1
0
image_impl::image_impl(unsigned pWidth, unsigned pHeight,
                       fg::ChannelFormat pFormat, fg::dtype pDataType)
    : mWidth(pWidth), mHeight(pHeight),
      mFormat(pFormat), mGLformat(gl_ctype(mFormat)), mGLiformat(gl_ictype(mFormat)),
      mDataType(pDataType), mGLType(gl_dtype(mDataType))
{
    CheckGL("Begin image_impl::image_impl");

    // Initialize OpenGL Items
    glGenTextures(1, &(mTex));
    glBindTexture(GL_TEXTURE_2D, mTex);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

    glTexImage2D(GL_TEXTURE_2D, 0, mGLiformat, mWidth, mHeight, 0, mGLformat, mGLType, NULL);

    CheckGL("Before PBO Initialization");
    glGenBuffers(1, &mPBO);
    glBindBuffer(GL_PIXEL_UNPACK_BUFFER, mPBO);
    size_t typeSize = 0;
    switch(mGLType) {
        case GL_INT:            typeSize = sizeof(int  );           break;
        case GL_UNSIGNED_INT:   typeSize = sizeof(unsigned int);    break;
        case GL_SHORT:          typeSize = sizeof(short  );         break;
        case GL_UNSIGNED_SHORT: typeSize = sizeof(unsigned short);  break;
        case GL_BYTE:           typeSize = sizeof(char );           break;
        case GL_UNSIGNED_BYTE:  typeSize = sizeof(unsigned char);   break;
        default: typeSize = sizeof(float); break;
    }
    size_t formatSize = 0;
    switch(mFormat) {
        case fg::FG_GRAYSCALE:     formatSize = 1;   break;
        case fg::FG_RG:            formatSize = 2;   break;
        case fg::FG_RGB:           formatSize = 3;   break;
        case fg::FG_BGR:           formatSize = 3;   break;
        case fg::FG_RGBA:          formatSize = 4;   break;
        case fg::FG_BGRA:          formatSize = 4;   break;
        default: formatSize = 1; break;
    }
    mPBOsize = mWidth * mHeight * formatSize * typeSize;
    glBufferData(GL_PIXEL_UNPACK_BUFFER, mPBOsize, NULL, GL_STREAM_COPY);

    glBindTexture(GL_TEXTURE_2D, 0);
    glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
    CheckGL("After PBO Initialization");

    mProgram = initShaders(vertex_shader_code, fragment_shader_code);

    CheckGL("End image_impl::image_impl");
}
Ejemplo n.º 2
0
hist_impl::hist_impl(unsigned pNBins, fg::dtype pDataType)
 : Chart2D(), mDataType(pDataType), mGLType(gl_dtype(mDataType)),
   mNBins(pNBins), mHistogramVBO(0), mHistogramVBOSize(0), mHistBarProgram(0),
   mHistBarMatIndex(0), mHistBarColorIndex(0), mHistBarYMaxIndex(0),
   mPointIndex(0), mFreqIndex(0)
{
    CheckGL("Begin hist_impl::hist_impl");
    mHistBarProgram = initShaders(gHistBarVertexShaderSrc, gHistBarFragmentShaderSrc);

    mPointIndex        = glGetAttribLocation (mHistBarProgram, "point");
    mFreqIndex         = glGetAttribLocation (mHistBarProgram, "freq");
    mHistBarColorIndex = glGetUniformLocation(mHistBarProgram, "barColor");
    mHistBarMatIndex   = glGetUniformLocation(mHistBarProgram, "transform");
    mHistBarNBinsIndex = glGetUniformLocation(mHistBarProgram, "nbins");
    mHistBarYMaxIndex  = glGetUniformLocation(mHistBarProgram, "ymax");

    switch(mGLType) {
        case GL_FLOAT:
            mHistogramVBO = createBuffer<float>(GL_ARRAY_BUFFER, mNBins, NULL, GL_DYNAMIC_DRAW);
            mHistogramVBOSize = mNBins*sizeof(float);
            break;
        case GL_INT:
            mHistogramVBO = createBuffer<int>(GL_ARRAY_BUFFER, mNBins, NULL, GL_DYNAMIC_DRAW);
            mHistogramVBOSize = mNBins*sizeof(int);
            break;
        case GL_UNSIGNED_INT:
            mHistogramVBO = createBuffer<unsigned>(GL_ARRAY_BUFFER, mNBins, NULL, GL_DYNAMIC_DRAW);
            mHistogramVBOSize = mNBins*sizeof(unsigned);
            break;
        case GL_SHORT:
            mHistogramVBO = createBuffer<short>(GL_ARRAY_BUFFER, mNBins, NULL, GL_DYNAMIC_DRAW);
            mHistogramVBOSize = mNBins*sizeof(short);
            break;
        case GL_UNSIGNED_SHORT:
            mHistogramVBO = createBuffer<unsigned short>(GL_ARRAY_BUFFER, mNBins, NULL, GL_DYNAMIC_DRAW);
            mHistogramVBOSize = mNBins*sizeof(unsigned short);
            break;
        case GL_UNSIGNED_BYTE:
            mHistogramVBO = createBuffer<unsigned char>(GL_ARRAY_BUFFER, mNBins, NULL, GL_DYNAMIC_DRAW);
            mHistogramVBOSize = mNBins*sizeof(unsigned char);
            break;
        default: fg::TypeError("Plot::Plot", __LINE__, 1, mDataType);
    }
    CheckGL("End hist_impl::hist_impl");
}