如何在Common Lisp中编写opengl ES 2.0 / 3.0?

PerduGames

我想写一个可以在android和linux上运行的代码,所以我认为我应该从cl-opengl开始,但是android使用的是opengl ES,所以我认为我应该使用opengl ES 2.0或3.0,但是我与此混淆的是,我正在使用sdl2创建窗口和cl-opengl,但是如何在常见的lisp中使用opengl ES?我必须在Android的opengl ES中编写两个代码,在Linux的opengl中编写其他代码?或者我可以在两个平台上都可以使用的opengl ES中编写一个代码?如何用cl-opengl编写opengl ES?我差点迷路了。

而且我认为可以通过ECL构建到Android。

我今天再次尝试,并按照以下教程进行操作:

https://pt.wikibooks.org/wiki/Programa%C3%A7%C3%A3o_com_OpenGL/Modern_OpenGL_Introduction

我可以在C语言中用我的代码绘制三角形。但是当我尝试使用cl-opengl时,不是这样:

(unless (gl::features-present-p (>= :glsl-version 1.2))
  (format t "Not support glsl 120.~%")
  (finish-output))
(let ((buffers (gl:gen-buffers 2))
      (vertex-buffer nil)
      (arr (gl:alloc-gl-array :float 6))
      (verts #(0.0 0.8
           -0.8 -0.8
           0.8 -0.8))
      (vs (gl:create-shader :vertex-shader))
      (fs (gl:create-shader :fragment-shader))
      (program nil)
      (attribute-coord2d nil))
  (setf vertex-buffer (elt buffers 0))
  (gl:bind-buffer :array-buffer vertex-buffer)
  (dotimes (i (length verts))
    (setf (gl:glaref arr i) (aref verts i)))
  (gl:buffer-data :array-buffer :static-draw arr)
  (gl:free-gl-array arr)
  (gl:shader-source vs *vertex-shader*)
  (gl:compile-shader vs)
  (gl:shader-source fs *fragment-shader*)
  (gl:compile-shader fs)
  (setf program (gl:create-program))
  (gl:attach-shader program vs)
  (gl:attach-shader program fs)
  (gl:link-program program)
  (setf attribute-coord2d (gl:get-attrib-location program "coord2d"))
  (gl:color 1.0 1.0 1.0 1.0)
  (gl:clear :color-buffer-bit)
  (gl:use-program program)
  (gl:enable-vertex-attrib-array attribute-coord2d)
  (gl:vertex-attrib-pointer attribute-coord2d
                2
                :float
                :false
                0
                vertex-buffer)
  (gl:draw-arrays vertex-buffer 0 3)
  (gl:disable-vertex-attrib-array attribute-coord2d)
  (gl:delete-program program))

通过上面的代码,我得到:

在此处输入图片说明

安德里亚

GL_INVALID_ENUM可能意味着您在某个地方传递了错误的常量,并且该错误发生在中DRAW-ARRAYS我以前没有使用过cl-opengl或Common Lisp,但是glDrawArrays的第一个参数应该是基本类型(在GL和GL ES中都是这样),例如GL_TRIANGLES如果cl-opengl是到GL API的1:1映射,那么我认为您的(gl:draw-arrays vertex-buffer 0 3)行是错误的,应该更像(gl:draw-arrays gl:triangles 0 3)

此外(gl:vertex-attrib-pointer attribute-coord2d 2 :float :false 0 vertex-buffer)可疑给我。我认为最后一个参数应该为0。从概念上讲,它是一个指针,但是在现代OpenGL和OpenGL ES中(当您像以前那样使用数组缓冲区时)实际上是缓冲区的偏移量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何定义一个列表,该列表的结果为序列[(0,0),(1,0),(2,0),(3,0)等]和[(0,0),(0,1 ),(0,2),(0,3)等]

来自分类Dev

Android OpenGL ES2。0VBO无法渲染

来自分类Dev

如何通过删除黑色像素(即[0,0,0])在Python中从图像的3D数组中获取2D数组

来自分类Dev

如何在x轴值出现多次的python中进行绘制,例如0 1 2 3 2 1 0

来自分类Dev

如何在Coq中证明(0 = 2)-> false?

来自分类Dev

如何在Ubuntu 19.10中安装'libgnome2-0'

来自分类Dev

如何从 yii2 的脚本标签中删除 0="3" 属性?

来自分类Dev

该代码的含义([1、2、3] || 0)[0]

来自分类Dev

该代码的含义([1、2、3] || 0)[0]

来自分类Dev

如何在PHP中检测(float)0 == 0还是null

来自分类Dev

如何在 Swift 中从与 (0, 0) 不同的坐标开始?

来自分类Dev

Math.Sqrt(2/3)返回0

来自分类Dev

如何模拟从范围([0,0])到d3中指定范围的“增长”轴?

来自分类Dev

如何创建从 (0,0,0) 到 (2,2,2) 的元组,条目最多为 2?

来自分类Dev

如何理解打字稿中类型定义中的[[0,1,2,... 0 []]`?

来自分类Dev

为什么range(0)== range(2,2,2)在Python 3中为true?

来自分类Dev

如何在C3P0中配置连接存在检查?

来自分类Dev

如何在我的休眠类中启用 c3p0 日志记录

来自分类Dev

如何在python的整型中删除.0

来自分类Dev

如何在 R 中退出(0)?

来自分类Dev

如何在WinForms图表中创建从(0,0)到(0,n)的线?

来自分类Dev

如何在jar文件的类路径中配置C3p0.properties文件以在类路径之外读取C3P0-config.xml

来自分类Dev

如何在z = 0平面中将2D转换矩阵(用于齐次坐标)转换为3D?

来自分类Dev

创建序列0、0、0、0、0、1、1、1、1、1、2、2、2、2、2、3、3、3、3、3、4、4、4、4、4 ,带有seq()的4

来自分类Dev

如何在getBuyIntent上解决PurchaseError {type = 3 subtype = 0}

来自分类Dev

使用Scala收集方法可帮助将[0,0,0,1,1,1,1,0,0,1,1]的列表转换为[3,4,2,2]

来自分类Dev

为什么2a0 ++等于2a1,但2e0 ++等于3?

来自分类Dev

如何在数组中找到一个为 0,0,0 的 Vector3

来自分类Dev

如何在没有0x0d的情况下在C中输出0x0a?

Related 相关文章

  1. 1

    如何定义一个列表,该列表的结果为序列[(0,0),(1,0),(2,0),(3,0)等]和[(0,0),(0,1 ),(0,2),(0,3)等]

  2. 2

    Android OpenGL ES2。0VBO无法渲染

  3. 3

    如何通过删除黑色像素(即[0,0,0])在Python中从图像的3D数组中获取2D数组

  4. 4

    如何在x轴值出现多次的python中进行绘制,例如0 1 2 3 2 1 0

  5. 5

    如何在Coq中证明(0 = 2)-> false?

  6. 6

    如何在Ubuntu 19.10中安装'libgnome2-0'

  7. 7

    如何从 yii2 的脚本标签中删除 0="3" 属性?

  8. 8

    该代码的含义([1、2、3] || 0)[0]

  9. 9

    该代码的含义([1、2、3] || 0)[0]

  10. 10

    如何在PHP中检测(float)0 == 0还是null

  11. 11

    如何在 Swift 中从与 (0, 0) 不同的坐标开始?

  12. 12

    Math.Sqrt(2/3)返回0

  13. 13

    如何模拟从范围([0,0])到d3中指定范围的“增长”轴?

  14. 14

    如何创建从 (0,0,0) 到 (2,2,2) 的元组,条目最多为 2?

  15. 15

    如何理解打字稿中类型定义中的[[0,1,2,... 0 []]`?

  16. 16

    为什么range(0)== range(2,2,2)在Python 3中为true?

  17. 17

    如何在C3P0中配置连接存在检查?

  18. 18

    如何在我的休眠类中启用 c3p0 日志记录

  19. 19

    如何在python的整型中删除.0

  20. 20

    如何在 R 中退出(0)?

  21. 21

    如何在WinForms图表中创建从(0,0)到(0,n)的线?

  22. 22

    如何在jar文件的类路径中配置C3p0.properties文件以在类路径之外读取C3P0-config.xml

  23. 23

    如何在z = 0平面中将2D转换矩阵(用于齐次坐标)转换为3D?

  24. 24

    创建序列0、0、0、0、0、1、1、1、1、1、2、2、2、2、2、3、3、3、3、3、4、4、4、4、4 ,带有seq()的4

  25. 25

    如何在getBuyIntent上解决PurchaseError {type = 3 subtype = 0}

  26. 26

    使用Scala收集方法可帮助将[0,0,0,1,1,1,1,0,0,1,1]的列表转换为[3,4,2,2]

  27. 27

    为什么2a0 ++等于2a1,但2e0 ++等于3?

  28. 28

    如何在数组中找到一个为 0,0,0 的 Vector3

  29. 29

    如何在没有0x0d的情况下在C中输出0x0a?

热门标签

归档