cherno专题

Cherno CPP学习笔记-04-高级特性

1.14、打渔! P45、C++的复制与拷贝构造函数 一个好习惯:通过const 引用来传递对象 拷贝是指要求复制数据,即复制内存。 当我们想要把一个对象或原语或一段数据从一个地方复制到另一个地方时,我们实际上有两个副本。拷贝需要时间,如果尽可能避免多余的拷贝(复制),可以提升性能。 class String{private:char* m_Ptr;unsigned int m_Si

Cherno CPP学习笔记-03-高级特性

1.12、再打一天渔吧 P27、C++继承 讲了一些思想,还是挺好的,就不记了。 P28、C++虚函数 虚函数引入了一种叫做Dynamic Dispatch (动态联编)的机制,通常通过虚函数表(v表)来实现编译。 虚函数表就是一个表,包含所有基类中所有虚函数的映射,这样我们在运行时可以将他们映射到正确的覆写(override)函数 虚函数有额外开销。一方面,需要额外的内存来存储v表

跟着cherno手搓游戏引擎【29】Batch简单合批

思路: CPU和GPU都开辟同样大小的一大块内存(为了存储顶点信息) 索引在程序运行时生成对应规则后绑定到索引缓冲中 动态生成顶点信息(现在改成Drawquad只是确定图形顶点的位置) 然后在Endscene,将CPU的动态生成的顶点数据上传给GPU,然后再绘制出来 所以,就是根据所绘制的物体,动态生成索引缓冲区,然后根据索引缓冲区一次性绘制多个物体。 实现: Renderer2

跟着cherno手搓游戏引擎【24】开启2D引擎前的项目总结(包括前置知识汇总)

前置技术: vs属性解释: MSBuild的入门完整教程(包学包会)-CSDN博客 配置界面: c++动态链接和静态链接: 隐藏的细节:编译与链接_哔哩哔哩_bilibili 【底层】动态链接库(dll)是如何工作的?_哔哩哔哩_bilibili cmake: 软件构建: CMake 快速入门_哔哩哔哩_bilibili CMake 保姆级教程【C/C++】_哔哩哔哩_bil

跟着cherno手搓游戏引擎【22】CameraController、Resize

前置: YOTO.h:  #pragma once//用于YOTO APP#include "YOTO/Application.h"#include"YOTO/Layer.h"#include "YOTO/Log.h"#include"YOTO/Core/Timestep.h"#include"YOTO/Input.h"#include"YOTO/KeyCode.h"#include"

跟着cherno手搓游戏引擎【23】项目维护、2D引擎之前的一些准备

项目维护: 修改文件结构: 头文件自己改改就好了  创建2DRendererLayer: Sandbox2D.h: #pragma once#include "YOTO.h"class Sandbox2D :public YOTO::Layer{public:Sandbox2D();virtual ~Sandbox2D() = default;virtual void OnA

跟着cherno手搓游戏引擎【21】shaderLibrary(shader管理类)

前置: ytpch.h: #pragma once#include<iostream>#include<memory>#include<utility>#include<algorithm>#include<functional>#include<string>#include<vector>#include<unordered_map>#include<unordered_

跟着cherno手搓游戏引擎【18】抽象Shader、项目小修改

抽象: Shader.h: #pragma once#include <string>namespace YOTO {class Shader {public:virtual~Shader()=default;virtual void Bind()const=0;virtual void UnBind()const=0;static Shader* Create(const std::str

跟着cherno手搓游戏引擎【19】抽象纹理

引入: 导入stb_image: GitHub - nothings/stb: stb single-file public domain libraries for C/C++ 下载复制stb_image.h的内容(8000多行),然后粘到如图位置 stb_image.cpp: #include"ytpch.h"#define STB_IMAGE_IMPLEMENTATION#

跟着cherno手搓游戏引擎【16】Camera和Uniform变量的封装

相机封装: OrthographicCamera.h: #pragma once#include <glm/glm.hpp>namespace YOTO {class OrthographicCamera{public:OrthographicCamera(float left,float right , float bottom,float top);const glm::vec3&

跟着cherno手搓游戏引擎【14】封装opengl

本节先把代码粘上,后续会慢慢把注释都给加上,先看代码了解个大概(待更新) 前置: RendererAPI.h: #pragma oncenamespace YOTO {enum class RendererAPI {None = 0,OpenGL=1};class Renderer {public:inline static RendererAPI GetAPI() {return s_R

跟着cherno手搓游戏引擎【13】着色器(shader)

创建着色器类: shader.h:初始化、绑定和解绑方法: #pragma once#include <string>namespace YOTO {class Shader {public:Shader(const std::string& vertexSrc, const std::string& fragmentSrc);~Shader();void Bind()const;void

跟着cherno手搓游戏引擎【12】渲染context和首个三角形

渲染上下文: 目的:修改WindowsWindow的结构,把glad抽离出来 WindowsWindow.h:新建m_Context #pragma once#include "YOTO/Window.h"#include <YOTO/Renderer/GraphicsContext.h>#include<GLFW/glfw3.h>#include"YOTO/Log.h"struct

跟着cherno手搓游戏引擎【8】按键和鼠标的KeyCode

自定义KeyCode 先把glfw3.h里的KeyCode的定义抄到咱这里来。 在YOTO下创建KeyCode.h: #pragma once#ifdef YT_PLATFORM_WINDOWS///从glfw3中拿的#define YT_KEY_SPACE 32#define YT_KEY_APOSTROPHE 39 /* ' */#def

跟着cherno手搓游戏引擎【5】layer(层)、Glad

编写基类层: Layer.h:提供Attach链接、Detach解绑、Update刷新、Event事件、GetName方法 #pragma once#include"YOTO/Core.h"#include"YOTO/Event/Event.h"namespace YOTO {class YOTO_API Layer{public:Layer(const std::string& nam

跟着cherno手搓游戏引擎【5】layer(层)

编写基类层: Layer.h:提供Attach链接、Detach解绑、Update刷新、Event事件、GetName方法 #pragma once#include"YOTO/Core.h"#include"YOTO/Event/Event.h"namespace YOTO {class YOTO_API Layer{public:Layer(const std::string& nam

跟着cherno手搓游戏引擎【4】窗口抽象、GLFW配置

引入GLFW: 在vendor里创建GLFW文件夹: 在github上下载,把包下载到GLFW包下。 GitHub - TheCherno/glfw: A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input修改SRC/premake5.lua的配置:12、13、15、36、37、38、39、40行的

跟着cherno手搓游戏引擎【3】事件系统和预编译头文件

不多说了直接上代码,课程中的架构讲的比较宽泛,而且有些方法写完之后并未测试。所以先把代码写完。理解其原理,未来使用时候会再此完善此博客。 文件架构: Event.h:核心基类 #pragma once#include"../Core.h"#include<string>#include<functional>namespace YOTO {// Hazel中的事件当前是阻塞的,这

C++-youtube cherno C++视频的一些知识点

对函数的调用在汇编中对应一句call func语句,其中func是一个函数的签名(signature)对程序而言,即使只有一个文件,链接器也需要链接,因为它需要链接程序入口点(entry point)一个程序的入口点不必一定是名为main的函数如果声明了一个函数A但是没有调用该函数的语句,那么不会报链接错误,因为根本不需要链接该函数;如果有该调用语句且所在的函数B是static,且所在static

C++-youtube cherno C++视频的一些知识点

对函数的调用在汇编中对应一句call func语句,其中func是一个函数的签名(signature)对程序而言,即使只有一个文件,链接器也需要链接,因为它需要链接程序入口点(entry point)一个程序的入口点不必一定是名为main的函数如果声明了一个函数A但是没有调用该函数的语句,那么不会报链接错误,因为根本不需要链接该函数;如果有该调用语句且所在的函数B是static,且所在static

Cherno C++系列笔记12——P40~P41 隐式转换与explicit关键字、运算符及其重载

文章目录 1.P40 隐式转换于explicit关键字1.1.隐式类型转换(隐式构造函数)1.2.explicit关键字禁止隐式类型转换 2.P41 运算符及其重载 1.P40 隐式转换于explicit关键字 参考:视频 笔记 1.1.隐式类型转换(隐式构造函数) 隐式转换的意思是不会明确的告诉编译器要怎么做,像是编译器通过上下文自动推导要做的事情。 C++允许编译器对代

Cherno C++ P60 为什么我不使用using namespace std

YouTube视频链接 为什么我不使用using namespace std 本文是ChernoP60视频的学习笔记。   在之前的代码中,有很多实例使用了标准库中的东西。比如std::vector,std::cout,std::cin.get()等。每次使用标准库中的函数时,需要在前面输入std::。若在文件的上面加上using namespace std;就不用这么做了。 #includ

Cherno C++笔记

Cherno C++笔记 很久前在油管上看的大神Cherno的C++教学视频,现在已经更新到了100P左右了。最近这段时间发现自己过去的时间里其实学了很多东西,但是一直没有时间总结,所以更新总结一下,也给自己梳理一下所学知识。 关于Cherno的笔记网络上有很多,我在写自己的笔记的时候因为时间比较久远,有些知识点会遗忘,也会一定参考别人的笔记,会在文末进行标注。 1.欢迎来到C++ 使用C