forked from blender/blender
WIP: uv-simple-select #1
@ -225,7 +225,7 @@ set(SRC
|
|||||||
DRW_select_buffer.h
|
DRW_select_buffer.h
|
||||||
intern/DRW_gpu_wrapper.hh
|
intern/DRW_gpu_wrapper.hh
|
||||||
intern/DRW_render.h
|
intern/DRW_render.h
|
||||||
intern/draw_attributes.h
|
intern/draw_attributes.hh
|
||||||
intern/draw_cache.h
|
intern/draw_cache.h
|
||||||
intern/draw_cache_extract.hh
|
intern/draw_cache_extract.hh
|
||||||
intern/draw_cache_impl.h
|
intern/draw_cache_impl.h
|
||||||
@ -234,7 +234,7 @@ set(SRC
|
|||||||
intern/draw_command.hh
|
intern/draw_command.hh
|
||||||
intern/draw_common.h
|
intern/draw_common.h
|
||||||
intern/draw_common_shader_shared.h
|
intern/draw_common_shader_shared.h
|
||||||
intern/draw_curves_private.h
|
intern/draw_curves_private.hh
|
||||||
intern/draw_debug.h
|
intern/draw_debug.h
|
||||||
intern/draw_debug.hh
|
intern/draw_debug.hh
|
||||||
intern/draw_hair_private.h
|
intern/draw_hair_private.h
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0-or-later
|
/* SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
* Copyright 2022 Blender Foundation. All rights reserved. */
|
* Copyright 2022 Blender Foundation. All rights reserved. */
|
||||||
|
|
||||||
#include "draw_attributes.h"
|
#include "draw_attributes.hh"
|
||||||
|
|
||||||
/* Return true if the given DRW_AttributeRequest is already in the requests. */
|
/* Return true if the given DRW_AttributeRequest is already in the requests. */
|
||||||
static bool drw_attributes_has_request(const DRW_Attributes *requests, DRW_AttributeRequest req)
|
static bool drw_attributes_has_request(const DRW_Attributes *requests, DRW_AttributeRequest req)
|
||||||
|
@ -9,9 +9,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#include <mutex>
|
||||||
# include <mutex>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "DNA_customdata_types.h"
|
#include "DNA_customdata_types.h"
|
||||||
|
|
||||||
@ -24,23 +22,19 @@
|
|||||||
#include "GPU_shader.h"
|
#include "GPU_shader.h"
|
||||||
#include "GPU_vertex_format.h"
|
#include "GPU_vertex_format.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
struct DRW_AttributeRequest {
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct DRW_AttributeRequest {
|
|
||||||
eCustomDataType cd_type;
|
eCustomDataType cd_type;
|
||||||
int layer_index;
|
int layer_index;
|
||||||
eAttrDomain domain;
|
eAttrDomain domain;
|
||||||
char attribute_name[64];
|
char attribute_name[64];
|
||||||
} DRW_AttributeRequest;
|
};
|
||||||
|
|
||||||
typedef struct DRW_Attributes {
|
struct DRW_Attributes {
|
||||||
DRW_AttributeRequest requests[GPU_MAX_ATTR];
|
DRW_AttributeRequest requests[GPU_MAX_ATTR];
|
||||||
int num_requests;
|
int num_requests;
|
||||||
} DRW_Attributes;
|
};
|
||||||
|
|
||||||
typedef struct DRW_MeshCDMask {
|
struct DRW_MeshCDMask {
|
||||||
uint32_t uv : 8;
|
uint32_t uv : 8;
|
||||||
uint32_t tan : 8;
|
uint32_t tan : 8;
|
||||||
uint32_t orco : 1;
|
uint32_t orco : 1;
|
||||||
@ -50,7 +44,7 @@ typedef struct DRW_MeshCDMask {
|
|||||||
* Edit uv layer is from the base edit mesh as modifiers could remove it. (see #68857)
|
* Edit uv layer is from the base edit mesh as modifiers could remove it. (see #68857)
|
||||||
*/
|
*/
|
||||||
uint32_t edit_uv : 1;
|
uint32_t edit_uv : 1;
|
||||||
} DRW_MeshCDMask;
|
};
|
||||||
|
|
||||||
/* Keep `DRW_MeshCDMask` struct within a `uint32_t`.
|
/* Keep `DRW_MeshCDMask` struct within a `uint32_t`.
|
||||||
* bit-wise and atomic operations are used to compare and update the struct.
|
* bit-wise and atomic operations are used to compare and update the struct.
|
||||||
@ -59,11 +53,9 @@ BLI_STATIC_ASSERT(sizeof(DRW_MeshCDMask) <= sizeof(uint32_t), "DRW_MeshCDMask ex
|
|||||||
|
|
||||||
void drw_attributes_clear(DRW_Attributes *attributes);
|
void drw_attributes_clear(DRW_Attributes *attributes);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
void drw_attributes_merge(DRW_Attributes *dst,
|
void drw_attributes_merge(DRW_Attributes *dst,
|
||||||
const DRW_Attributes *src,
|
const DRW_Attributes *src,
|
||||||
std::mutex &render_mutex);
|
std::mutex &render_mutex);
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Return true if all requests in b are in a. */
|
/* Return true if all requests in b are in a. */
|
||||||
bool drw_attributes_overlap(const DRW_Attributes *a, const DRW_Attributes *b);
|
bool drw_attributes_overlap(const DRW_Attributes *a, const DRW_Attributes *b);
|
||||||
@ -78,7 +70,3 @@ bool drw_custom_data_match_attribute(const CustomData *custom_data,
|
|||||||
const char *name,
|
const char *name,
|
||||||
int *r_layer_index,
|
int *r_layer_index,
|
||||||
eCustomDataType *r_type);
|
eCustomDataType *r_type);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
@ -22,7 +22,7 @@
|
|||||||
#include "GPU_index_buffer.h"
|
#include "GPU_index_buffer.h"
|
||||||
#include "GPU_vertex_buffer.h"
|
#include "GPU_vertex_buffer.h"
|
||||||
|
|
||||||
#include "draw_attributes.h"
|
#include "draw_attributes.hh"
|
||||||
|
|
||||||
struct DRWSubdivCache;
|
struct DRWSubdivCache;
|
||||||
struct MeshRenderData;
|
struct MeshRenderData;
|
||||||
|
@ -34,10 +34,10 @@
|
|||||||
|
|
||||||
#include "DRW_render.h"
|
#include "DRW_render.h"
|
||||||
|
|
||||||
#include "draw_attributes.h"
|
#include "draw_attributes.hh"
|
||||||
#include "draw_cache_impl.h" /* own include */
|
#include "draw_cache_impl.h" /* own include */
|
||||||
#include "draw_cache_inline.h"
|
#include "draw_cache_inline.h"
|
||||||
#include "draw_curves_private.h" /* own include */
|
#include "draw_curves_private.hh" /* own include */
|
||||||
#include "draw_shader.h"
|
#include "draw_shader.h"
|
||||||
|
|
||||||
using blender::ColorGeometry4f;
|
using blender::ColorGeometry4f;
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#include "GPU_batch.h"
|
#include "GPU_batch.h"
|
||||||
#include "GPU_material.h"
|
#include "GPU_material.h"
|
||||||
|
|
||||||
#include "draw_attributes.h"
|
#include "draw_attributes.hh"
|
||||||
#include "draw_cache_impl.h"
|
#include "draw_cache_impl.h"
|
||||||
#include "draw_cache_inline.h"
|
#include "draw_cache_inline.h"
|
||||||
#include "draw_pointcloud_private.hh" /* own include */
|
#include "draw_pointcloud_private.hh" /* own include */
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
#include "DRW_render.h"
|
#include "DRW_render.h"
|
||||||
|
|
||||||
#include "draw_cache_impl.h"
|
#include "draw_cache_impl.h"
|
||||||
#include "draw_curves_private.h"
|
#include "draw_curves_private.hh"
|
||||||
#include "draw_hair_private.h"
|
#include "draw_hair_private.h"
|
||||||
#include "draw_manager.h"
|
#include "draw_manager.h"
|
||||||
#include "draw_shader.h"
|
#include "draw_shader.h"
|
||||||
|
@ -10,26 +10,23 @@
|
|||||||
#include "BKE_attribute.h"
|
#include "BKE_attribute.h"
|
||||||
#include "GPU_shader.h"
|
#include "GPU_shader.h"
|
||||||
|
|
||||||
#include "draw_attributes.h"
|
#include "draw_attributes.hh"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct Curves;
|
struct Curves;
|
||||||
struct GPUVertBuf;
|
struct GPUVertBuf;
|
||||||
struct GPUBatch;
|
struct GPUBatch;
|
||||||
|
struct GPUMaterial;
|
||||||
|
|
||||||
#define MAX_THICKRES 2 /* see eHairType */
|
#define MAX_THICKRES 2 /* see eHairType */
|
||||||
#define MAX_HAIR_SUBDIV 4 /* see hair_subdiv rna */
|
#define MAX_HAIR_SUBDIV 4 /* see hair_subdiv rna */
|
||||||
|
|
||||||
typedef enum CurvesEvalShader {
|
enum CurvesEvalShader {
|
||||||
CURVES_EVAL_CATMULL_ROM = 0,
|
CURVES_EVAL_CATMULL_ROM = 0,
|
||||||
CURVES_EVAL_BEZIER = 1,
|
CURVES_EVAL_BEZIER = 1,
|
||||||
} CurvesEvalShader;
|
};
|
||||||
#define CURVES_EVAL_SHADER_NUM 3
|
#define CURVES_EVAL_SHADER_NUM 3
|
||||||
|
|
||||||
typedef struct CurvesEvalFinalCache {
|
struct CurvesEvalFinalCache {
|
||||||
/* Output of the subdivision stage: vertex buffer sized to subdiv level. */
|
/* Output of the subdivision stage: vertex buffer sized to subdiv level. */
|
||||||
GPUVertBuf *proc_buf;
|
GPUVertBuf *proc_buf;
|
||||||
|
|
||||||
@ -58,10 +55,10 @@ typedef struct CurvesEvalFinalCache {
|
|||||||
/* Output of the subdivision stage: vertex buffers sized to subdiv level. This is only attributes
|
/* Output of the subdivision stage: vertex buffers sized to subdiv level. This is only attributes
|
||||||
* on point domain. */
|
* on point domain. */
|
||||||
GPUVertBuf *attributes_buf[GPU_MAX_ATTR];
|
GPUVertBuf *attributes_buf[GPU_MAX_ATTR];
|
||||||
} CurvesEvalFinalCache;
|
};
|
||||||
|
|
||||||
/* Curves procedural display: Evaluation is done on the GPU. */
|
/* Curves procedural display: Evaluation is done on the GPU. */
|
||||||
typedef struct CurvesEvalCache {
|
struct CurvesEvalCache {
|
||||||
/* Control point positions on evaluated data-block combined with parameter data. */
|
/* Control point positions on evaluated data-block combined with parameter data. */
|
||||||
GPUVertBuf *proc_point_buf;
|
GPUVertBuf *proc_point_buf;
|
||||||
|
|
||||||
@ -82,19 +79,15 @@ typedef struct CurvesEvalCache {
|
|||||||
int strands_len;
|
int strands_len;
|
||||||
int elems_len;
|
int elems_len;
|
||||||
int point_len;
|
int point_len;
|
||||||
} CurvesEvalCache;
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensure all necessary textures and buffers exist for GPU accelerated drawing.
|
* Ensure all necessary textures and buffers exist for GPU accelerated drawing.
|
||||||
*/
|
*/
|
||||||
bool curves_ensure_procedural_data(struct Curves *curves,
|
bool curves_ensure_procedural_data(Curves *curves,
|
||||||
struct CurvesEvalCache **r_hair_cache,
|
CurvesEvalCache **r_hair_cache,
|
||||||
struct GPUMaterial *gpu_material,
|
GPUMaterial *gpu_material,
|
||||||
int subdiv,
|
int subdiv,
|
||||||
int thickness_res);
|
int thickness_res);
|
||||||
|
|
||||||
void drw_curves_get_attribute_sampler_name(const char *layer_name, char r_sampler_name[32]);
|
void drw_curves_get_attribute_sampler_name(const char *layer_name, char r_sampler_name[32]);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
#include "DRW_pbvh.hh"
|
#include "DRW_pbvh.hh"
|
||||||
|
|
||||||
#include "draw_attributes.h"
|
#include "draw_attributes.hh"
|
||||||
#include "draw_manager.h"
|
#include "draw_manager.h"
|
||||||
#include "draw_pbvh.h"
|
#include "draw_pbvh.h"
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
#include "DRW_gpu_wrapper.hh"
|
#include "DRW_gpu_wrapper.hh"
|
||||||
#include "DRW_render.h"
|
#include "DRW_render.h"
|
||||||
|
|
||||||
#include "draw_attributes.h"
|
#include "draw_attributes.hh"
|
||||||
#include "draw_cache_impl.h"
|
#include "draw_cache_impl.h"
|
||||||
#include "draw_common.h"
|
#include "draw_common.h"
|
||||||
#include "draw_manager.h"
|
#include "draw_manager.h"
|
||||||
|
@ -7,36 +7,38 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "draw_curves_private.h"
|
#ifdef __cplusplus
|
||||||
#include "draw_hair_private.h"
|
# include "draw_curves_private.hh"
|
||||||
|
# include "draw_hair_private.h"
|
||||||
|
|
||||||
|
struct GPUShader;
|
||||||
|
|
||||||
|
enum eParticleRefineShaderType {
|
||||||
|
PART_REFINE_SHADER_TRANSFORM_FEEDBACK,
|
||||||
|
PART_REFINE_SHADER_TRANSFORM_FEEDBACK_WORKAROUND,
|
||||||
|
PART_REFINE_SHADER_COMPUTE,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* draw_shader.cc */
|
||||||
|
|
||||||
|
GPUShader *DRW_shader_hair_refine_get(ParticleRefineShader refinement,
|
||||||
|
eParticleRefineShaderType sh_type);
|
||||||
|
|
||||||
|
GPUShader *DRW_shader_curves_refine_get(CurvesEvalShader type, eParticleRefineShaderType sh_type);
|
||||||
|
|
||||||
|
GPUShader *DRW_shader_debug_print_display_get();
|
||||||
|
GPUShader *DRW_shader_debug_draw_display_get();
|
||||||
|
GPUShader *DRW_shader_draw_visibility_compute_get();
|
||||||
|
GPUShader *DRW_shader_draw_view_finalize_get();
|
||||||
|
GPUShader *DRW_shader_draw_resource_finalize_get();
|
||||||
|
GPUShader *DRW_shader_draw_command_generate_get();
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct GPUShader;
|
|
||||||
|
|
||||||
typedef enum eParticleRefineShaderType {
|
|
||||||
PART_REFINE_SHADER_TRANSFORM_FEEDBACK,
|
|
||||||
PART_REFINE_SHADER_TRANSFORM_FEEDBACK_WORKAROUND,
|
|
||||||
PART_REFINE_SHADER_COMPUTE,
|
|
||||||
} eParticleRefineShaderType;
|
|
||||||
|
|
||||||
/* draw_shader.cc */
|
|
||||||
|
|
||||||
struct GPUShader *DRW_shader_hair_refine_get(ParticleRefineShader refinement,
|
|
||||||
eParticleRefineShaderType sh_type);
|
|
||||||
|
|
||||||
struct GPUShader *DRW_shader_curves_refine_get(CurvesEvalShader type,
|
|
||||||
eParticleRefineShaderType sh_type);
|
|
||||||
|
|
||||||
struct GPUShader *DRW_shader_debug_print_display_get(void);
|
|
||||||
struct GPUShader *DRW_shader_debug_draw_display_get(void);
|
|
||||||
struct GPUShader *DRW_shader_draw_visibility_compute_get(void);
|
|
||||||
struct GPUShader *DRW_shader_draw_view_finalize_get(void);
|
|
||||||
struct GPUShader *DRW_shader_draw_resource_finalize_get(void);
|
|
||||||
struct GPUShader *DRW_shader_draw_command_generate_get(void);
|
|
||||||
|
|
||||||
void DRW_shaders_free(void);
|
void DRW_shaders_free(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
#include "BKE_attribute.hh"
|
#include "BKE_attribute.hh"
|
||||||
#include "BKE_mesh.h"
|
#include "BKE_mesh.h"
|
||||||
|
|
||||||
#include "draw_attributes.h"
|
#include "draw_attributes.hh"
|
||||||
#include "draw_subdivision.h"
|
#include "draw_subdivision.h"
|
||||||
#include "extract_mesh.hh"
|
#include "extract_mesh.hh"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user