OBS图形及渲染
+ -

OBS数组DARRAY

2024-10-11 7 0

DARRAY是一个宏,是对某个类型声明为数据。

#define DARRAY(type)                     \
    union {                          \
        struct darray da;        \
        struct {                 \
            type *array;     \
            size_t num;      \
            size_t capacity; \
        };                       \
    }

其内部又是一个共用体。其中 darray又是一个其成员的展开。

struct darray {
    void *array;
    size_t num;
    size_t capacity;
};

所以这玩意展开就是这样的:

    union
    {                       
        struct darray
        {
            void *array;
            size_t num;
            size_t capacity;
        }da;     
        struct 
        {
            type *array;
            size_t num;
            size_t capacity;
        };
    }

区别就是一个可以匿名访问,da可以按整体传递。两个array成员,一个是void指针,一个是宏指定的类型指针。
为什么不外面包一层了。真是迷惑。

struct ep_pass {
    char *name;
    DARRAY(struct cf_token) vertex_program;  //PASS中调用VS主函数
    DARRAY(struct cf_token) fragment_program;//PASS中调用PS主函数
    struct gs_effect_pass *pass;
};

传递整体:

    ep_makeshaderstring(ep, &shader_str,&pass_in->vertex_program.da, &used_params);

为什么不是这个,更加清晰的表示。

    ep_makeshaderstring(ep, &shader_str,&pass_in->vertex_program, &used_params);

0 篇笔记 写笔记

OBS数组DARRAY
DARRAY是一个宏,是对某个类型声明为数据。#define DARRAY(type) union { struct darray da; s......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!