Unify drawing logic into glUtils.

This commit is contained in:
2018-03-16 14:25:14 +01:00
parent c447a496fd
commit c814d274d4
5 changed files with 30 additions and 33 deletions

View File

@@ -12,17 +12,7 @@ void ImageInteractionAnimation::draw(float step)
caffe::caffe_scal(deltas.size(), step, vertexBuffer.data()); caffe::caffe_scal(deltas.size(), step, vertexBuffer.data());
caffe::caffe_add(vertexBuffer.size(), vertexBuffer.data(), startingPositions.data(), vertexBuffer.data()); caffe::caffe_add(vertexBuffer.size(), vertexBuffer.data(), startingPositions.data(), vertexBuffer.data());
glEnableClientState(GL_TEXTURE_COORD_ARRAY); drawImageTiles(vertexBuffer.size() / 3, vertexBuffer.data(), textureCoordinates.data(), texture);
glEnableClientState(GL_VERTEX_ARRAY);
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
texture.bind(GL_TEXTURE_2D);
glTexCoordPointer(2, GL_FLOAT, 0, textureCoordinates.data());
glVertexPointer(3, GL_FLOAT, 0, vertexBuffer.data());
glDrawArrays(GL_QUADS, 0, vertexBuffer.size() / 3);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} }
ImageInteractionAnimation::ImageInteractionAnimation(const DType *data, const std::vector<int> &shape, ImageInteractionAnimation::ImageInteractionAnimation(const DType *data, const std::vector<int> &shape,

View File

@@ -26,17 +26,7 @@ MultiImageVisualisation::MultiImageVisualisation(const fmri::LayerData &layer)
void MultiImageVisualisation::render() void MultiImageVisualisation::render()
{ {
glEnableClientState(GL_TEXTURE_COORD_ARRAY); drawImageTiles(vertexBuffer.size() / 3, vertexBuffer.data(), texCoordBuffer.data(), texture);
glEnableClientState(GL_VERTEX_ARRAY);
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
texture.bind(GL_TEXTURE_2D);
glTexCoordPointer(2, GL_FLOAT, 0, texCoordBuffer.data());
glVertexPointer(3, GL_FLOAT, 0, vertexBuffer.data());
glDrawArrays(GL_QUADS, 0, vertexBuffer.size() / 3);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} }
vector<float> MultiImageVisualisation::getVertices(const std::vector<float> &nodePositions, float scaling) vector<float> MultiImageVisualisation::getVertices(const std::vector<float> &nodePositions, float scaling)

View File

@@ -35,17 +35,7 @@ void PoolingLayerAnimation::draw(float timeStep)
caffe::caffe_scal(vertexBuffer.size(), timeStep, vertexBuffer.data()); caffe::caffe_scal(vertexBuffer.size(), timeStep, vertexBuffer.data());
caffe::caffe_add(startingPositions.size(), startingPositions.data(), vertexBuffer.data(), vertexBuffer.data()); caffe::caffe_add(startingPositions.size(), startingPositions.data(), vertexBuffer.data(), vertexBuffer.data());
glEnableClientState(GL_VERTEX_ARRAY); drawImageTiles(vertexBuffer.size() / 3, vertexBuffer.data(), textureCoordinates.data(), original);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
original.bind(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glVertexPointer(3, GL_FLOAT, 0, vertexBuffer.data());
glTexCoordPointer(2, GL_FLOAT, 0, textureCoordinates.data());
glDrawArrays(GL_QUADS, 0, vertexBuffer.size() / 3);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
} }
Texture PoolingLayerAnimation::loadTextureForData(const LayerData &data) Texture PoolingLayerAnimation::loadTextureForData(const LayerData &data)

View File

@@ -138,3 +138,18 @@ void fmri::setOrthographicProjection() {
// switch back to modelview mode // switch back to modelview mode
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
} }
void fmri::drawImageTiles(int n, const float *vertexBuffer, const float *textureCoords, const Texture &texture)
{
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
texture.bind(GL_TEXTURE_2D);
glTexCoordPointer(2, GL_FLOAT, 0, textureCoords);
glVertexPointer(3, GL_FLOAT, 0, vertexBuffer);
glDrawArrays(GL_QUADS, 0, n);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}

View File

@@ -49,4 +49,16 @@ namespace fmri {
void setOrthographicProjection(); void setOrthographicProjection();
void restorePerspectiveProjection(); void restorePerspectiveProjection();
/**
* Draw a series of textured tiles to the screen.
*
* This function ends up drawing GL_QUADS.
*
* @param n Number of vertices
* @param vertexBuffer
* @param textureCoords
* @param texture
*/
void drawImageTiles(int n, const float* vertexBuffer, const float* textureCoords, const Texture& texture);
} }