OpenGL problems in conduit

Are you writing custom shader code or are there some setup routines that ModuleWorks requires in order to get things configured correctly? I’m not familiar with the ModuleWorks API for getting things to draw.

Hi Steve, I’m writng my own shader.
In order to understand I created a project without ModuleWorks that draw a simple line on screen.

This is my shader:

#version 330

layout (location = 0) in vec3 aVertex;

precision mediump float;
uniform mat4 uMVP;

out vec3 vertex;

void main() {
  	vec4 pos = uMVP * vec4(aVertex, 1.0f);
  	vertex = aVertex;
  	gl_Position = pos;
}

In my rhino conduit post draw event I have this:

case CSupportChannels::SC_POSTDRAWOBJECTS:


if (!bCallOnceOpenGL)	{
	
	glewInit();
	
	bCallOnceOpenGL = true;

	glGenVertexArrays(1, &VertexArrayID);
	glBindVertexArray(VertexArrayID);

	// Create and compile my GLSL program from the shaders
	programID = LoadShaders("SimpleTransform.vertexshader", "SingleColor.fragmentshader");

	// Get a handle for our "MVP" uniform
	MatrixID = glGetUniformLocation(programID, "MVP");

	// Generate 1 buffer, put the resulting identifier in vertexbuffer
	glGenBuffers(1, &vertexbuffer);
	// The following commands will talk about our 'vertexbuffer' buffer
	glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
	// Give our vertices to OpenGL.
	glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_DYNAMIC_DRAW);
}

	CRhinoDisplayEngine* p_engine = in_pipeline.Engine();

	// model view matrix
	ON_Xform worldToCamera = p_engine->WorldToCamera();
	// projection matrix
	ON_Xform cameraToClip = p_engine->CameraToClip();

	glm::mat4 world_to_camera(1.0f);
	world_to_camera[0] = glm::vec4(worldToCamera[0][0], worldToCamera[1][0], worldToCamera[2][0], worldToCamera[3][0]);
	world_to_camera[1] = glm::vec4(worldToCamera[0][1], worldToCamera[1][1], worldToCamera[2][1], worldToCamera[3][1]);
	world_to_camera[2] = glm::vec4(worldToCamera[0][2], worldToCamera[1][2], worldToCamera[2][2], worldToCamera[3][2]);
	world_to_camera[3] = glm::vec4(worldToCamera[0][3], worldToCamera[1][3], worldToCamera[2][3], worldToCamera[3][3]);
		
	glm::mat4 projection(1.0f); 
	projection[0] = glm::vec4(cameraToClip[0][0], cameraToClip[1][0], cameraToClip[2][0], cameraToClip[3][0]);
	projection[1] = glm::vec4(cameraToClip[0][1], cameraToClip[1][1], cameraToClip[2][1], cameraToClip[3][1]);
	projection[2] = glm::vec4(cameraToClip[0][2], cameraToClip[1][2], cameraToClip[2][2], cameraToClip[3][2]);
	projection[3] = glm::vec4(cameraToClip[0][3], cameraToClip[1][3], cameraToClip[2][3], cameraToClip[3][3]);
	
	glm::mat4 MVP = projection * world_to_camera; 

	// Use our shader
	glUseProgram(programID);

	// Send our transformation to the currently bound shader in the "MVP" uniform
	glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);

	// 1rst attribute buffer : vertices
	glEnableVertexAttribArray(0);
	glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
	glVertexAttribPointer(
		0,                  // attribute. No particular reason for 0, but must match the layout in the shader.
		3,                  // size
		GL_FLOAT,           // type
		GL_FALSE,           // normalized?
		0,                  // stride
		(void*)0            // array buffer offset
	);
	
	// Draw the triangle !
	glDrawArrays(GL_LINES, 0, 2); 

	glDisableVertexAttribArray(0);
	glDisableVertexAttribArray(1);

The g_vertex_buffer_data contains a simple line with 2 vertices declared like this:

static const GLfloat g_vertex_buffer_data[] = {
	0.0f, 0.0f, 0.0f,
	 0.5f, 0.5f, 0.0f
};

When I run my plugIn on screen I see the line in the correct position but if I move the mouse the line remain always in the same position. I suppose that the problem is in my MVP matrix.