当前位置: 首页 > news >正文

glmark2代码阅读总结

glmark2代码阅读总结

一、总体

  1. 用输入参数生成testbench项
  2. 用scene和benchmark管理进行复用
  3. 通过类的重载,创建出不同的分支和具体的实现点,如scene和mainloop类
  4. 用例执行又规划,每个scene都统一有setup,等
  5. 使用scene的继承关系,整体的调用流程就比较简单,好组织

二、小技巧

一组字符串添加间隔方法

用一个static的变量控制第一个

std::string Values;
for (iterator It = Map.begin();It != Map.end();It++)
{static bool doSeparator(false);if (doSeparator){Values += ",";}const std::string& curName = It->first;Values += curName;doSeparator = true;
}

列出目录下的文件

只限于Linux下,用dirent.h头文件的目录操作函数:opendir、readdir 和 closedir。

#include <fstream>
#include <dirent.h>void
Util::list_files(const std::string& dirName, std::vector<std::string>& fileVec)
{DIR* dir = opendir(dirName.c_str());if (!dir){Log::error("Failed to open models directory '%s'\n", dirName.c_str());return;}struct dirent* entry = readdir(dir);while (entry){std::string pathname(dirName + "/");pathname += std::string(entry->d_name);// Skip '.' and '..'if (entry->d_name[0] != '.'){fileVec.push_back(pathname);}entry = readdir(dir);}closedir(dir);
}

字符串定义时截取

使用了std::string模板的特性,在定义字符串时,从原赋值字符串中取部分字串初始化。

string des(src, startPos, len);

表示des是src从startPos开始len长的字符串
类似的用法还有:

std::string s(n, 'x'); // 把s初始化为由连续n个字符x组成的串
string s(s2, pos); // s是string s2从下标pos开始的字符的拷贝

计算模型perspective参数的方法

/* Calculate a projection matrix that is a good fit for the model */
vec3 maxVec = model.maxVec();
vec3 minVec = model.minVec();
vec3 diffVec = maxVec - minVec;
centerVec_ = maxVec + minVec;
centerVec_ /= 2.0;
float diameter = diffVec.length();
radius_ = diameter / 2;
float fovy = 2.0 * atanf(radius_ / (2.0 + radius_));
fovy /= M_PI;
fovy *= 180.0;
float aspect(static_cast<float>(canvas_.width())/static_cast<float>(canvas_.height()));
perspective_.setIdentity();
perspective_ *= LibMatrix::Mat4::perspective(fovy, aspect, 2.0, 2.0 + diameter);

shader管理

shader是用了拼接的方式:
提供的shader中添加变量的方法:ShaderSource::add_const 函数,字符串操作,先生成变量的定义字符串,然后调用 ShaderSource::add 函数,这个函数中可以区分是否加到函数内还是函数外,函数内使用 ShaderSource::add_local, 函数外使用 ShaderSource::add_global。add_local:先找到对应函数名,换到 “{” 和 “\n” 之后插入要添加的定义字符串;add_global:先找到 “precious”所在行和 “\n”,在下面一行插入要添加的定义字符串,同时会检测 “#if” 和 “#endif” 对。

program管理

,过程比较明晰,阅读和书写方便:
Program::init createprogram对象
Program::addShader 加载并编译shader,在这里面都对 shader 的处理也都进行了友好的封装:valid发给发判断shader是否有效,erroMessage输出error log,compile进行编译,ready判断编译结果,attach将shader和program绑定。
所有shader对象存放在一个Shader的vector中,用push_back可以方便的管理。
program也包装了类似的接口:addShader、valid、ready、release
start:use program

mesh类型

convert_to_mesh
set_attrib_locations: 设置attrib_location
vbo_update_method
interleave
build_vbo
build_array

顶点数据的存放:next_vertex set_attrib set_vertex_format set_attrib_locations

相关文章:

glmark2代码阅读总结

glmark2代码阅读总结 一、总体 用输入参数生成testbench项用scene和benchmark管理进行复用通过类的重载&#xff0c;创建出不同的分支和具体的实现点&#xff0c;如scene和mainloop类用例执行又规划&#xff0c;每个scene都统一有setup&#xff0c;等使用scene的继承关系&…...

第 6 章 监控系统 | 监控套路 - 总结

前面,我们使用 Prometheus + Grafana + Node Exporter 实现虚拟机监控及告警。 那么,😇 监控的套路究竟是什么呢? 第 1 步:暴露 metrics,通过某个 exporter 将 metrics 暴露出来第 2 步:配置 Prometheus 抓取上面暴露的 metrics 数据第 3 步:加速 metrics 显示,配置…...

VsCode中C文件调用其他C文件函数失败

之前一直使用CodeBlocks&#xff0c;最近使用vscode多&#xff0c;感觉它比较方便&#xff0c;但在调用其他C文件的时候发现报错以下内容基于单C文件运行成功&#xff0c;否则请移步 博文&#xff1a;VSCode上搭建C/C开发环境 报错信息 没有使用CodeRunner插件&#xff0c;弹…...

css中content属性你了解多少?

在CSS中&#xff0c;content属性通常与伪元素&#xff08;如 ::before 和 ::after&#xff09;一起使用&#xff0c;用于在元素的内容之前或之后插入生成的内容。这个属性不接受常规的HTML内容&#xff0c;而是接受一些特定的值&#xff0c;如字符串、属性值、计数器值等。 以…...

JVM-GC-G1垃圾回收器

JVM-GC-G1垃圾回收器 基本概念 card table card table概念是为了解决新生代对象进入老年代时&#xff0c;在进行新生代扫描的时候会遍历老年代对象的问题。将内存分为多个card,如果在一个老年代card中存在引用新生代对象的对象&#xff0c;则将该区域标记及为dirty card。 CS…...

【Ubuntu通用压力测试】Ubuntu16.04 CPU压力测试

使用 stress 对CPU进行压力测试 我也是一个ubuntu初学者&#xff0c;分享是Linux的优良美德。写的不好请大佬不要喷&#xff0c;多谢支持。 sudo apt-get update 日常先更新再安装东西不容易出错 sudo apt-get upgrade -y 继续升级一波 sudo apt-get install -y linux-tools…...

Artix Linux 默认不使用 systemd

开发者选择不使用systemd&#xff0c;而倾向于使用OpenRC或runit作为其初始化系统的原因。 哲学和设计原则&#xff1a;Systemd是一个功能丰富的初始化系统和系统管理器&#xff0c;它集成了许多功能&#xff0c;但这也导致它的设计哲学与一些用户或开发者的偏好不符。有些用户…...

JVM-GC-CMS垃圾回收器

JVM-CMS垃圾回收器 CMS垃圾回收的步骤 1. 初始标记&#xff08;InitialMarking&#xff09; 这是一个STW的过程&#xff0c;并行标记&#xff0c;只是标记GC Roots能直接关联到的对象。由于GC Root直接关联的对象少&#xff0c;因此STW时间比较短。 2. 并发标记 非STW的过程&…...

【玩转google云】实战:如何在GKE上使用Helm安装和配置3节点的RabbitMQ集群

需求 因项目需要需要在Google Kubernetes Engine (GKE) 中使用Helm安装一个3节点的RabbitMQ集群,配置用户名和密码,开通公网访问的Web管理界面,指定namespace为mq,并使用5G的硬盘存储MQ的数据。 前提条件 GKE集群:确保你有一个运行中的GKE集群。Helm工具:确保已安装Hel…...

【神经网络】深度神经网络

深度神经网络&#xff08;Deep Neural Network&#xff0c;简称DNN&#xff09;是一种模仿人脑神经网络结构和工作原理的机器学习模型。它通过层级化的特征学习和权重调节&#xff0c;能够实现复杂任务的高性能解决方案。深度神经网络由多个神经元层组成&#xff0c;每个神经元…...

机器学习算法 —— K近邻(KNN分类)

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 目录 KNN的介绍和应用KNN的介绍1) KNN建立过程2) 类别的判定KNN的优点KNN的缺点KNN的应用实战KNN分类数据集 —— KNN分类库函数导入数据导入模型训练&可视化原理简析莺尾花数据集 —— KNN分…...

Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码

Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码 可封装APP&#xff0c;适合做猫狗宠物类的发信息发布&#xff0c;当然懂的修改一下&#xff0c;做其他信息发布也是可以的。 Thinkphp5内核流浪猫流浪狗宠物领养平台H5源码...

c++ 智能指针使用注意事项及解决方案

c11智能指针 shared_ptr介绍注意事项示例解决方案 weak_ptr特点示例 unique_ptr特点示例 shared_ptr 介绍 shared_ptr 是一种智能指针&#xff0c;用于自动管理动态分配的对象的生命周期。它通过引用计数机制来确保当最后一个 shared_ptr 指向一个对象时&#xff0c;该对象会…...

SQLite Delete 语句

SQLite Delete 语句 SQLite 的 DELETE 语句用于从表中删除数据。它是 SQL 数据库管理中非常基础且重要的操作之一。在使用 DELETE 语句时,可以删除表中的特定行,也可以删除整个表的数据。本文将详细介绍 SQLite 中的 DELETE 语句,包括其语法、用法以及如何安全地执行删除操…...

vue3的基本使用方法

【 vue3实例 】 【 0 】对象、方法和属性 对象&#xff08;Object&#xff09;&#xff1a; 对象是编程中的一个数据结构&#xff0c;它可以包含多种数据类型&#xff0c;包括数字、字符串、布尔值、数组、其他对象等。对象通常由一系列属性和方法组成。在面向对象编程&…...

Java数据结构与算法(盛水的容器贪心算法)

前言 . - 力扣(LeetCode) 贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优或最佳的选择,以期望通过一系列的局部最优选择达到全局最优解的算法。贪心算法的核心思想是贪心选择性质和最优子结构性质。 贪心算法的基本步骤 建立模型:将问题分解为一…...

MYSQL 数字(Aggregate)函数

目录 1、AVG() 2、MAX() 3、MIN() 4、SUM() 5、COUNT() 6、LIMIT() 1、AVG() 解释&#xff1a;返回数值列(字段)的平均值。 语法格式&#xff1a;SELECT AVG(column_name) FROM table_name 中文注释&#xff1a;select AVG(数值列/字段) from 表名 ; 用法&#xff1…...

【TensorFlow深度学习】如何处理不平衡数据集与欠采样、过采样技术

如何处理不平衡数据集与欠采样、过采样技术 如何处理不平衡数据集与欠采样、过采样技术:实现均衡学习的艺术1. 不平衡数据集的识别与评估2. 欠采样技术:减少多数类样本3. 过采样技术:增加少数类样本4. 集成采样策略:SMOTE +ENN 或 SMOTE +Tomek Links5. 评估与选择最佳策略…...

【考研数学】如何保证进度不掉队?暑假强化保姆级规划

数一125学长前来解答&#xff01;一句话&#xff0c;跟对老师&#xff0c;抓基础&#xff0c;有计划的进行复习才是关键&#xff01; 数学基础非常重要&#xff0c;包括高等数学、线性代数和概率论等基础知识点。要确保对这些基础知识有扎实的掌握。 按照教材的顺序&#xff…...

Vue3【二十一】Vue 路由模式(createWebHashHistory /createWebHistory )和RouterLink写法

Vue3【二十一】Vue 路由模式&#xff08;createWebHashHistory /createWebHistory &#xff09;和RouterLink写法 Vue3【二十一】Vue 路由模式和普通组件目录结构 createWebHistory history模式&#xff1a;url不带#号&#xff0c;需要后端做url适配 适合销售项目 利于seo crea…...

【交易策略】#22-24 残差资金流强度因子

【交易策略】#22-24 残差资金流强度因子...

CentOS 7.9检测硬盘坏区、实物定位(三)

系列文章目录 CentOS 7.9上创建JBOD&#xff08;一&#xff09; CentOS 7.9上创建的JBOD阵列恢复&#xff08;二&#xff09; 文章目录 系列文章目录前言一、在系统中找到硬盘对应的盘符二、使用命令定位实物1.badblocks检测坏块2.对2T以上的硬盘检测&#xff08;对本篇非必要…...

redis持久化方式—RDB

RDB快照 与AOF记录写操作命令不同&#xff0c;RDB直接记录内存中的二进制数据&#xff0c;reids恢复数据时&#xff0c;直接将RDB文件加载到内存中就可以了&#xff0c;听起来是不是RDB完虐AOF&#xff1f;那么看完本文&#xff0c;会让你的态度转变&#xff0c;因为RDB的缺点…...

java8实战1(让方法参数具备行为能力)

客户需求是查出颜色为green的苹果 客户需求变成查出颜色为red的苹果 假设现在客户需求又变了,找出黄色的呢?你想查什么颜色直接做为参数输入 让调用者输入颜色参数 问题是现在客户想把重量做为条件,来筛选苹果集合 这就为难了,客户需求随时会变 观察以上例子,发现有个共同…...

C#(C Sharp)学习笔记_多态【十九】

前言 个人觉得多态在面向对象编程中还比较重要的&#xff0c;而且不容易理解。也是学了一个下午&#xff0c;才把笔记写得相对比较完善&#xff0c;但仍欠缺一些内容。慢慢来吧…… 什么是多态&#xff1f; 基本概念 在编程语言和类型论中&#xff0c;多态&#xff08;Poly…...

电子竞赛1——基于DDS的AM信号发生器

课题要求 产生AM调幅波&#xff1b; 要求&#xff1a;载波10K&#xff0c;被调制波1K&#xff1b; 短按键1&#xff08;pin_143&#xff09;改变该调幅波的调制度&#xff1a;25%、50%、75%&#xff1b; 长按按键1&#xff08;pin_143&#xff09;改变被调制信号频率&#…...

CentOS7的#!bash #!/bin/bash #!/bin/env bash #!/usr/bin/bash #!/usr/bin/env bash

bash脚本开头可写成 #!/bin/bash , #!/bin/env bash , #!/usr/bin/bash , #!/usr/bin/env bash #!/bin/bash , #!/usr/bin/bash#!/bin/env bash , #!/usr/bin/env bash CentOS7的 /bin 是 /usr/bin 的软链接, /sbin 是 /usr/sbin 的软链接, [root3050 ~]# ll /bin lrwxrwxrw…...

代码随想录第四十一天打卡

01背包问题 二维 代码随想录 视频讲解&#xff1a;带你学透0-1背包问题&#xff01;| 关于背包问题&#xff0c;你不清楚的地方&#xff0c;这里都讲了&#xff01;| 动态规划经典问题 | 数据结构与算法_哔哩哔哩_bilibili #include <iostream> #include <vector>…...

矩阵补全IGMC 学习笔记

目录 Inductive Graph-based Matrix Completion (IGMC) 模型 igmc推理示例&#xff1a; Inductive Graph-based Matrix Completion (IGMC) 模型 原版代码&#xff1a; IGMC/models.py at master muhanzhang/IGMC GitHub GNN推理示例 torch_geometric版本&#xff1a;tor…...

面试题之CSS

1. 引入样式的方式 外部样式 link import 区别 内部样式 /* 写在头部标签 */ <style></style>行内样式 2. 三行代码画三角形 .triangle{width:0px;border:100px solid;border-color:transparent transparent transparent red; }3.属性的继承 可继承的属性 …...

网站建设税费/sem推广代运营

索引类型 phoenix的索引大致分为两类global index和local index&#xff0c;好像和星环有点类似&#xff0c;其实这是hbase二级索引解决方案里面广为人知的两种方案&#xff0c;侧重点不同&#xff0c;使用场景也不一样。 global index&#xff0c;global是默认的索引格式。官…...

可以免费做演播的听书网站/龙岗网站建设

前言我们在上一篇文章 中以实例讲解如何定义和使用 lambda 表达式&#xff0c;以及与其它语言相比&#xff0c;lambda 表达式在 Java 中的特殊规范。并且提到&#xff0c;lambda 表达式可以进一步简化为函数引用。这篇文章将介绍如何使用函数引用&#xff0c;话不多说了&#x…...

如何建立小程序网站/如何自己开发一个平台

最近使用代理自动配置脚本&#xff0c;方便客户端使用代理&#xff0c;但发现在IIS上默认没有配置.pac这种文件的MIME类型&#xff01;解决方法&#xff1a;在IIS里&#xff0c;在站点上点右键&#xff0d;>“属性”&#xff0d;>“HTTP头”&#xff0d;>“MIME类型”…...

wordpress 大神/seo搜索优化 指数

原文链接&#xff1a;http://jalammar.github.io/visual-numpy/创建数组我们可以创建一个NumPy数组(也就是强大的ndarray)&#xff0c;方法是传递一个python列表并使用np.array() 。在本例中&#xff0c;python创建了我们可以在这里看到的数组:通常情况下&#xff0c;我们希望N…...

网站开发设计实训总结/楚雄百度推广电话

FS2462是泛海微自主开发的5A降压型同步整流芯片&#xff0c;频率500Khz&#xff0c;可以支持降压IC输出5V4.5A降压IC输出1.2V5A降压IC输出3.3A5A降压IC输出1.8V5A降压IC输出2.5V5A是国内首家大电流同步5A芯片&#xff0c;内部集成极低RDS内阻20豪欧金属氧化物半导体场效应晶体管…...

常熟网页设计报价/考拉seo

问候语s​​tackoverflow社区。我是一个很长时间的潜伏者&#xff0c;第一次海报。我花了好几个小时来研究&#xff0c;试图克服下面的问题&#xff0c;显然没有成功&#xff0c;因为我在这里发布。应该指出的是&#xff0c;我只用jQuery(或任何JS)编写了几个月的代码。我的目标…...