Add Chromium-only Blender WebEngine parity work

This commit is contained in:
mes123456
2026-08-12 04:47:48 -04:00
commit 9fd26010f6
18225 changed files with 11622124 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
# SPDX-FileCopyrightText: 2026 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(SRC
intern/common.cpp
intern/encoder.cpp
intern/decoder.cpp
intern/common.h
intern/encoder.h
intern/decoder.h
)
set(LIB
PRIVATE bf::dependencies::optional::meshoptimizer
)
# Equivalent `blender_add_lib`,
# unrolled and stripped down to be able to set the library type to `SHARED`.
add_library(bf_intern_meshopt_bridge SHARED "${SRC}")
blender_link_libraries(bf_intern_meshopt_bridge "${LIB}")
blender_source_group(bf_intern_meshopt_bridge "${SRC}")
if(APPLE)
# On macOS, prevent the `meshopt` library (already present in the application bundle)
# from being wrongly copied into the Xcode archive used for application distribution,
# which pollutes the archive and prevents it from being properly recognized.
# This effectively corrects a bad implicit CMake behavior for `SHARED` library targets on Xcode.
set_target_properties(bf_intern_meshopt_bridge PROPERTIES
XCODE_ATTRIBUTE_SKIP_INSTALL "YES"
XCODE_ATTRIBUTE_INSTALL_PATH ""
)
endif()

View File

@@ -0,0 +1,7 @@
/* SPDX-FileCopyrightText: 2026 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#include "common.h"
#include <meshoptimizer.h>

View File

@@ -0,0 +1,11 @@
/* SPDX-FileCopyrightText: 2026 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#if defined(_MSC_VER)
# define API(returnType) extern "C" __declspec(dllexport) returnType __cdecl
#else
# define API(returnType) extern "C" returnType
#endif

View File

@@ -0,0 +1,49 @@
/* SPDX-FileCopyrightText: 2026 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#include "decoder.h"
#include <meshoptimizer.h>
int decodeVertexBuffer(void *destination,
size_t vertex_count,
size_t vertex_size,
const unsigned char *buffer,
size_t buffer_size)
{
return meshopt_decodeVertexBuffer(destination, vertex_count, vertex_size, buffer, buffer_size);
}
int decodeIndexBuffer(void *destination,
size_t index_count,
size_t index_size,
const unsigned char *buffer,
size_t buffer_size)
{
return meshopt_decodeIndexBuffer(destination, index_count, index_size, buffer, buffer_size);
}
int decodeIndexSequence(void *destination,
size_t index_count,
size_t index_size,
const unsigned char *buffer,
size_t buffer_size)
{
return meshopt_decodeIndexSequence(destination, index_count, index_size, buffer, buffer_size);
}
void decodeFilterOct(void *buffer, size_t count, size_t stride)
{
meshopt_decodeFilterOct(buffer, count, stride);
}
void decodeFilterQuat(void *buffer, size_t count, size_t stride)
{
meshopt_decodeFilterQuat(buffer, count, stride);
}
void decodeFilterExp(void *buffer, size_t count, size_t stride)
{
meshopt_decodeFilterExp(buffer, count, stride);
}

View File

@@ -0,0 +1,39 @@
/* SPDX-FileCopyrightText: 2026 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#include "common.h"
#include <stddef.h>
API(int)
decodeVertexBuffer(void *destination,
size_t vertex_count,
size_t vertex_size,
const unsigned char *buffer,
size_t buffer_size);
API(int)
decodeIndexBuffer(void *destination,
size_t index_count,
size_t index_size,
const unsigned char *buffer,
size_t buffer_size);
API(int)
decodeIndexSequence(void *destination,
size_t index_count,
size_t index_size,
const unsigned char *buffer,
size_t buffer_size);
API(void)
decodeFilterOct(void *buffer, size_t count, size_t stride);
API(void)
decodeFilterQuat(void *buffer, size_t count, size_t stride);
API(void)
decodeFilterExp(void *buffer, size_t count, size_t stride);

View File

@@ -0,0 +1,78 @@
/* SPDX-FileCopyrightText: 2026 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#include "encoder.h"
#include <meshoptimizer.h>
void encodeIndexVersion(int version)
{
meshopt_encodeIndexVersion(version);
}
void encodeVertexVersion(int version)
{
meshopt_encodeVertexVersion(version);
}
size_t encodeIndexBufferBound(size_t index_count, size_t vertex_count)
{
return meshopt_encodeIndexBufferBound(index_count, vertex_count);
}
size_t encodeIndexBuffer(unsigned char *buffer,
size_t buffer_size,
const unsigned int *indices,
size_t index_count)
{
return meshopt_encodeIndexBuffer(buffer, buffer_size, indices, index_count);
}
size_t encodeVertexBufferBound(size_t vertex_count, size_t vertex_size)
{
return meshopt_encodeVertexBufferBound(vertex_count, vertex_size);
}
size_t encodeVertexBuffer(unsigned char *buffer,
size_t buffer_size,
const void *vertices,
size_t vertex_count,
size_t vertex_size)
{
return meshopt_encodeVertexBuffer(buffer, buffer_size, vertices, vertex_count, vertex_size);
}
size_t encodeIndexSequenceBound(size_t index_count, size_t vertex_count)
{
return meshopt_encodeIndexSequenceBound(index_count, vertex_count);
}
size_t encodeIndexSequence(unsigned char *buffer,
size_t buffer_size,
const unsigned int *indices,
size_t index_count)
{
return meshopt_encodeIndexSequence(buffer, buffer_size, indices, index_count);
}
void encodeFilterOct(void *destination, size_t count, size_t stride, int bits, const float *data)
{
meshopt_encodeFilterOct(destination, count, stride, bits, data);
}
void encodeFilterQuat(void *destination, size_t count, size_t stride, int bits, const float *data)
{
meshopt_encodeFilterQuat(destination, count, stride, bits, data);
}
void encodeFilterExp(void *destination,
size_t count,
size_t stride,
int bits,
const float *data,
enum encodeExpMode mode)
{
meshopt_encodeFilterExp(
destination, count, stride, bits, data, (enum meshopt_EncodeExpMode)mode);
}

View File

@@ -0,0 +1,77 @@
/* SPDX-FileCopyrightText: 2026 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
#include "common.h"
#include <stddef.h>
enum encodeExpMode {
/** When encoding exponents, use separate values for each component (maximum quality) */
EncodeExpSeparate,
/**
* When encoding exponents, use shared value for all components of each vector
* (better compression).
*/
EncodeExpSharedVector,
/**
* When encoding exponents, use shared value for each component of all vectors
* (best compression).
*/
EncodeExpSharedComponent,
/**
* When encoding exponents, use separate values for each component, but clamp to 0 (good quality
* if very small values are not important).
*/
EncodeExpClamped,
};
API(void)
encodeIndexVersion(int version);
API(void)
encodeVertexVersion(int version);
API(size_t)
encodeIndexBufferBound(size_t index_count, size_t vertex_count);
API(size_t)
encodeIndexBuffer(unsigned char *buffer,
size_t buffer_size,
const unsigned int *indices,
size_t index_count);
API(size_t)
encodeVertexBufferBound(size_t vertex_count, size_t vertex_size);
API(size_t)
encodeVertexBuffer(unsigned char *buffer,
size_t buffer_size,
const void *vertices,
size_t vertex_count,
size_t vertex_size);
API(size_t)
encodeIndexSequenceBound(size_t index_count, size_t vertex_count);
API(size_t)
encodeIndexSequence(unsigned char *buffer,
size_t buffer_size,
const unsigned int *indices,
size_t index_count);
API(void)
encodeFilterOct(void *destination, size_t count, size_t stride, int bits, const float *data);
API(void)
encodeFilterQuat(void *destination, size_t count, size_t stride, int bits, const float *data);
API(void)
encodeFilterExp(void *destination,
size_t count,
size_t stride,
int bits,
const float *data,
enum encodeExpMode mode);