LearnOpenGL

  1. 311-Instancing(sphere),在使用实例的时候,第二个model占用4个location,所以第三个insColor要指定location=5

    layout (location = 0) in vec3 position;
    layout (location = 1) in mat4 model;
    layout (location = 5) in vec4 insColor;
    

  2. Indicies 指的是单个实例的模型从哪个offset开始画,而不是这个实例的第offset个开始画
    void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indicies, GLsizei primcount);
    

记录一些出现的情况

  1. 无法定位程序输入点 记一个小问题:在运行Qt的时候,提示“无法定位程序输入点于动态链接库QtOpenGL5.dll” 排查了lib和x64/x86都没什么问题,最后在CSDN上有个人的回答提醒了自己………… “把qt环境变量尽量放到前面,避免程序误认其他环境变量中包含的qt库” Qt/bin目录环境变量提前就好了……

  2. 生成静态库可以使用,但是换成动态库就产生未定义的符号错误,使用nm命令可以查看到.a文件含有未定义的符号,但是.dylib就没有相应符号。 在class的函数声明前加入GEEX_EXPORT,该问题解决
    #define GEEX_EXPORT __attribute__((visibility("visibility_type")))
    
    如果设置了__attribute__((visibility ("default")))的函数, 其public属性仍能对外可见, 而不是hidden。可见编译指令-fvisibility是对所有属性符号进行处理, 而__attribute__((visibility ("default")))是对特定函数可见性进行设置, 避免冲突

CMake代码优化编译选项

Mac有一次系统升级后,发现clang不支持了openmp了,最后brew安装了clang-omp。但是好不容易配置起来后发现程序运行速度巨慢,今天发现没有打开编译优化,在CMakeLists.txt文件中加入以下编译选项即可(o2优化,甚至o3):

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
程序速度提升4~5倍

CMake使用Eigen

  • Eigen是一个开源的C++矩阵运算库,日常使用效果还是不错,更好的有Intel的MKL,但是收费的。
  • Eigen好在不用怎么配置,都是现成的.h/.cpp文件,直接把文件包含进工程目录里面即可。

配合CMake可以实现各个平台的使用: 有一个Demo

根目录是main.cpp、CMakeLists.txt文件和3rd目录,Eigen头文件包含在3rd目录下。 其中CMakeLists.txt文件内容如下

if(COMMAND cmake_minimum_required)
   cmake_minimum_required(VERSION 3.4)
endif(COMMAND cmake_minimum_required)
AUX_SOURCE_DIRECTORY(./ SOURCES)
INCLUDE_DIRECTORIES(./3rd)
add_executable(EigenTest ${SOURCES})
然后用cmake生成平台相应编译器的工程即可。