渲染流程记录

本文详细介绍了 Cocos2d-x 的渲染流程,包括从创建纹理到最终渲染的全过程。此外还提供了使用自定义 shader 时需要注意的绑定参数等实用信息。

前一段时间搞清楚了cocos2dx的渲染流程 今天好像有遗忘了不少细节 果然好记性不如烂笔头 还是不偷懒几下
渲染流程记录:
create (texturecache:addimage ,ccimage:initWithImageFile initWithImageData,texture2d:initWithImage) inittexture settexture&&setTextureRect( updateBlendFunc() setOpacityModifyRGB updateColor updateQuad setTextureCoords setVertexRect setContentSize) 设置完数据 当一帧过去directory drawScene visit进行draw draw把当前对象加入渲染队列 最后render进行渲染画出 render根据不同队列类型渲染的流程网上可以找到
还有用自己的shader一定要绑定的a_position,a_color,a_texturecoord应该是在texture2d里面用到
另外之前练习的为了方便查看弄出console也记录下 免得以后到处找
main.cpp

#include "main.h"
#include "AppDelegate.h"
#include "cocos2d.h"

USING_NS_CC;
#define USE_WIN32_CONSOLE
int APIENTRY _tWinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPTSTR    lpCmdLine,
                       int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);
#ifdef USE_WIN32_CONSOLE

    AllocConsole();

    CreateConsoleScreenBuffer(GENERIC_WRITE|GENERIC_READ,0,0,CONSOLE_TEXTMODE_BUFFER,0);
    /*HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD size; size.X = 512 ; size.Y = 512;
    SetConsoleScreenBufferSize(hOut,size);*/

    freopen("CONIN$", "r", stdin);
    freopen("CONOUT$", "w", stdout);
    freopen("CONOUT$", "w", stderr);


    HANDLE input   = GetStdHandle(STD_INPUT_HANDLE);        

    ::SetConsoleMode(input,ENABLE_ECHO_INPUT|ENABLE_PROCESSED_INPUT
        |ENABLE_WINDOW_INPUT|ENABLE_MOUSE_INPUT|ENABLE_PROCESSED_OUTPUT|
        ENABLE_WRAP_AT_EOL_OUTPUT|ENABLE_LINE_INPUT|0x0004|0x0040);
#endif



    // create the application instance
    AppDelegate app;
    int ret = Application::getInstance()->run();
#ifdef USE_WIN32_CONSOLE
    FreeConsole();
#endif
    return ret;
}
Vulkan渲染流程是一种现代图形和计算API,旨在提供高性能和跨平台支持。其设计允许开发者对硬件进行细粒度控制,从而优化性能[^1]。Vulkan渲染流程的工作原理和步骤可以分为以下几个部分: ### 初始化和设置 在开始渲染之前,需要完成一系列初始化和设置步骤,包括创建实例、选择物理设备、创建逻辑设备、创建交换链、创建图像视图、创建帧缓冲区、创建命令池等。这些步骤为后续的渲染操作奠定了基础。 ### 创建渲染通道 渲染通道(Render Pass)定义了渲染操作的基本单元,包括颜色附件、深度/模板附件以及子通道等。渲染通道描述了渲染过程中使用的附件及其使用方式。 ### 创建图形管线 图形管线(Graphics Pipeline)是Vulkan中最为复杂的部分之一,它包括多个阶段,如顶点输入、顶点着色器、细分控制着色器、细分评估着色器、几何着色器、光栅化、片段着色器和颜色混合等。每个阶段都有特定的功能,并且可以通过管线状态对象(Pipeline State Object, PSO)进行配置。 ### 记录命令 命令记录(Command Recording)是将渲染命令记录到命令缓冲区中的过程。这些命令包括绑定管线、设置视口和剪裁矩形、绘制命令等。命令缓冲区可以在多个线程中并行记录,从而提高性能。 ### 提交命令 命令提交(Command Submission)是将记录好的命令缓冲区提交到队列中的过程。Vulkan支持多种类型的队列,如图形队列、计算队列和传输队列。提交命令时需要指定信号量和围栏,以确保同步。 ### 渲染循环 渲染循环(Render Loop)是应用程序的主循环,它负责处理用户输入、更新场景状态、记录命令缓冲区、提交命令缓冲区和交换缓冲区等操作。渲染循环通常会持续运行直到用户关闭应用程序。 ### 同步机制 同步机制(Synchronization)是Vulkan中非常重要的一部分,它确保了命令的正确执行顺序。Vulkan提供了多种同步原语,如围栏(Fence)、信号量(Semaphore)和事件(Event),用于协调不同阶段的操作。 ### 资源管理 资源管理(Resource Management)涉及内存分配、缓冲区和图像创建、资源绑定等操作。Vulkan要求开发者显式管理资源,这虽然增加了复杂性,但也提供了更高的灵活性和性能。 ### 示例代码 以下是一个简单的Vulkan渲染流程的伪代码示例,展示了如何创建实例、选择物理设备、创建逻辑设备等基本步骤: ```cpp // 创建Vulkan实例 VkInstance instance; VkInstanceCreateInfo createInfo = {}; createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; // 填充createInfo结构体 // ... VkResult result = vkCreateInstance(&createInfo, nullptr, &instance); if (result != VK_SUCCESS) { // 处理错误 } // 选择物理设备 VkPhysicalDevice physicalDevice; uint32_t deviceCount = 0; vkEnumeratePhysicalDevices(instance, &deviceCount, nullptr); std::vector<VkPhysicalDevice> devices(deviceCount); vkEnumeratePhysicalDevices(instance, &deviceCount, devices.data()); // 选择合适的物理设备 physicalDevice = devices[0]; // 简化示例 // 创建逻辑设备 VkDevice device; VkDeviceCreateInfo deviceCreateInfo = {}; deviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; // 填充deviceCreateInfo结构体 // ... result = vkCreateDevice(physicalDevice, &deviceCreateInfo, nullptr, &device); if (result != VK_SUCCESS) { // 处理错误 } ``` 通过以上步骤,可以构建一个基本的Vulkan渲染流程。每个步骤都需要详细的配置和管理,以充分利用Vulkan的强大功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值