1

I'm learning opengl in blender and successfully drew a triangle in 3d viewport. Now I'm trying to draw a rectangle using Element Object. Here is what I've tried. But it draws nothing.

from bgl import *
import bpy
from sys import getsizeof

vertexShaderSource = """ #version 330

layout(location = 0) in vec3 position; void main() { gl_Position = vec4(position,1.0); } """

fragmentShaderSource = """ #version 330

out vec4 outputColor; void main(){ outputColor = vec4(1.0f, 0.5f, 0.2f, 1.0); } """ vertices = [0.5 , 0.5 , 0.0, 0.5, -0.5 , 0.0, -0.5, -0.5 , 0.0, -0.5, 0.5, 0.0]

indices = [0,1,3, 1,2,3]

vertexPositions_ptr = Buffer(GL_FLOAT,len(vertices),vertices) indices_ptr = Buffer(GL_INT, len(indices),indices)

VBO = Buffer(GL_INT,1) VAO = Buffer(GL_INT,1) EBO = Buffer(GL_INT,1)

glGenVertexArrays(1,VAO) glGenBuffers(1, VBO) glGenBuffers(1, EBO)

Shader compilation

vertexShader = glCreateShader(GL_VERTEX_SHADER) glShaderSource(vertexShader, vertexShaderSource) glCompileShader(vertexShader)

fragmentShader = glCreateShader(GL_FRAGMENT_SHADER) glShaderSource(fragmentShader, fragmentShaderSource) glCompileShader(fragmentShader)

shaderProgram = glCreateProgram()

glAttachShader(shaderProgram, vertexShader) glAttachShader(shaderProgram, fragmentShader)

glLinkProgram(shaderProgram)

glDetachShader(shaderProgram, vertexShader); glDetachShader(shaderProgram, fragmentShader); glDeleteShader(vertexShader); glDeleteShader(fragmentShader);

glBindVertexArray(VAO[0])

glBindBuffer(GL_ARRAY_BUFFER, VBO[0]) glBufferData(GL_ARRAY_BUFFER, getsizeof(vertexPositions_ptr), vertexPositions_ptr, GL_STATIC_DRAW)

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO[0]) glBufferData(GL_ELEMENT_ARRAY_BUFFER, getsizeof(indices_ptr), indices_ptr, GL_STATIC_DRAW)

glEnableVertexAttribArray(0); glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,None)

glBindBuffer(GL_ARRAY_BUFFER, 0) glBindVertexArray(0)

draw_handle = None

Draw

def draw(): glUseProgram(shaderProgram) glBindVertexArray(VAO[0]) glDrawElements(GL_TRIANGLES,len(indices),GL_UNSIGNED_INT, None) glBindVertexArray(0) glUseProgram(0)

Clear

def in_3_sec(): bpy.types.SpaceView3D.draw_handler_remove(draw_handle,'WINDOW') glDeleteVertexArrays(1,VAO) glDeleteBuffers(1,VBO)
glDeleteBuffers(1,EBO)
glDeleteProgram(shaderProgram)

draw_handle = bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') bpy.app.timers.register(in_3_sec, first_interval=3)

What am I doing wrong here?

Me BMan
  • 75
  • 6
  • 1
    See: https://blender.stackexchange.com/questions/187969/make-2d-gpu-polygon-and-blf-text-move-with-follow-the-cursor/187974#187974 – brockmann Jul 04 '21 at 17:57

0 Answers0