zoukankan      html  css  js  c++  java
  • !带有指针的类和struct赋值的本质

    //这个变量必须在while循环外面
    //原因是当将loadModels[modelNum].g_3DModel[0]赋值给新建类后
    //里面的数值拷贝过去了,而里头的指针只给了地址
    //所以如果这个调用了析构函数,即出了它的作用域,
    //指针的值也就销毁了

    参考

    g_3DModel的struct是

    struct t3DModel //模型信息结构体
    {
    int numOfObjects; // 模型中对象的数目
    int numOfMaterials; // 模型中材质的数目
    vector<tMatInfo> pMaterials; // 材质链表信息
    vector<t3DObject> pObject; // 模型中对象链表信息
    FBox3 boundBox; //模型的外包 2013.12.9
    };

    这里没有指针,但是里头的object有指针

    struct t3DObject //对象信息结构体
    {
    int numOfVerts; // 模型中顶点的数目
    int numOfFaces; // 模型中面的数目
    int numTexVertex; // 模型中纹理坐标的数目
    int materialID; // 纹理ID
    bool bHasTexture; // 是否具有纹理映射
    bool bVisible;//对象是否可见,默认是可见
    char strName[255]; // 对象的名称
    FPoint3 *pVerts; // 对象的顶点
    FPoint3 *pNormals; // 顶点的法向量
    FPoint2 *pTexVerts; // 纹理UV坐标
    tFace *pFaces; // 对象的面信息
    FPoint3 *pFaceNormals; // 面的法线
    }; ,

    所以如果在GPU里头要编程,带有指针的地方,需要逐个拷贝,而不是整体拷贝,因为用类来实现整体拷贝,指针的地方只拷贝了地址,这样在device无法access host的地址,造成读取失败

  • 相关阅读:
    WPF数据绑定机制是如何实现
    C#自定义特性的使用
    MVVMLight学习笔记(一)---MVVMLight概述
    C# Autofac学习笔记
    EFCodeFirst快速搭建入门
    SQL having与where用法区别
    EventWaitHandle 类
    C# EF 使用 (CodeFirst模式)
    wmi 远程启动程序
    Centos 7 的一些 基础知识
  • 原文地址:https://www.cnblogs.com/qingsunny/p/4334358.html
Copyright © 2011-2022 走看看