Merge pull request #22520 from akien-mga/fix-warnings
Fix warning about functions defined but not used [-Wunused-function]
This commit is contained in:
commit
0378a9ba80
137
core/io/zip_io.cpp
Normal file
137
core/io/zip_io.cpp
Normal file
|
@ -0,0 +1,137 @@
|
|||
/*************************************************************************/
|
||||
/* zip_io.cpp */
|
||||
/*************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/*************************************************************************/
|
||||
/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */
|
||||
/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
|
||||
#include "zip_io.h"
|
||||
|
||||
#include "core/os/copymem.h"
|
||||
|
||||
void *zipio_open(void *data, const char *p_fname, int mode) {
|
||||
|
||||
FileAccess *&f = *(FileAccess **)data;
|
||||
|
||||
String fname;
|
||||
fname.parse_utf8(p_fname);
|
||||
|
||||
if (mode & ZLIB_FILEFUNC_MODE_WRITE) {
|
||||
f = FileAccess::open(fname, FileAccess::WRITE);
|
||||
} else {
|
||||
|
||||
f = FileAccess::open(fname, FileAccess::READ);
|
||||
}
|
||||
|
||||
if (!f)
|
||||
return NULL;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
uLong zipio_read(void *data, void *fdata, void *buf, uLong size) {
|
||||
|
||||
FileAccess *f = *(FileAccess **)data;
|
||||
return f->get_buffer((uint8_t *)buf, size);
|
||||
}
|
||||
|
||||
uLong zipio_write(voidpf opaque, voidpf stream, const void *buf, uLong size) {
|
||||
|
||||
FileAccess *f = *(FileAccess **)opaque;
|
||||
f->store_buffer((uint8_t *)buf, size);
|
||||
return size;
|
||||
}
|
||||
|
||||
long zipio_tell(voidpf opaque, voidpf stream) {
|
||||
|
||||
FileAccess *f = *(FileAccess **)opaque;
|
||||
return f->get_position();
|
||||
}
|
||||
|
||||
long zipio_seek(voidpf opaque, voidpf stream, uLong offset, int origin) {
|
||||
|
||||
FileAccess *f = *(FileAccess **)opaque;
|
||||
|
||||
int pos = offset;
|
||||
switch (origin) {
|
||||
|
||||
case ZLIB_FILEFUNC_SEEK_CUR:
|
||||
pos = f->get_position() + offset;
|
||||
break;
|
||||
case ZLIB_FILEFUNC_SEEK_END:
|
||||
pos = f->get_len() + offset;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
|
||||
f->seek(pos);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int zipio_close(voidpf opaque, voidpf stream) {
|
||||
|
||||
FileAccess *&f = *(FileAccess **)opaque;
|
||||
if (f) {
|
||||
f->close();
|
||||
f = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int zipio_testerror(voidpf opaque, voidpf stream) {
|
||||
|
||||
FileAccess *f = *(FileAccess **)opaque;
|
||||
return (f && f->get_error() != OK) ? 1 : 0;
|
||||
}
|
||||
|
||||
voidpf zipio_alloc(voidpf opaque, uInt items, uInt size) {
|
||||
|
||||
voidpf ptr = memalloc(items * size);
|
||||
zeromem(ptr, items * size);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void zipio_free(voidpf opaque, voidpf address) {
|
||||
|
||||
memfree(address);
|
||||
}
|
||||
|
||||
zlib_filefunc_def zipio_create_io_from_file(FileAccess **p_file) {
|
||||
|
||||
zlib_filefunc_def io;
|
||||
io.opaque = p_file;
|
||||
io.zopen_file = zipio_open;
|
||||
io.zread_file = zipio_read;
|
||||
io.zwrite_file = zipio_write;
|
||||
io.ztell_file = zipio_tell;
|
||||
io.zseek_file = zipio_seek;
|
||||
io.zclose_file = zipio_close;
|
||||
io.zerror_file = zipio_testerror;
|
||||
io.alloc_mem = zipio_alloc;
|
||||
io.free_mem = zipio_free;
|
||||
return io;
|
||||
}
|
112
core/io/zip_io.h
112
core/io/zip_io.h
|
@ -31,114 +31,28 @@
|
|||
#ifndef ZIP_IO_H
|
||||
#define ZIP_IO_H
|
||||
|
||||
#include "core/os/copymem.h"
|
||||
#include "core/os/file_access.h"
|
||||
|
||||
// Not direclty used in this header, but assumed available in downstream users
|
||||
// like platform/*/export/export.cpp. Could be fixed, but probably better to have
|
||||
// thirdparty includes in as little headers as possible.
|
||||
#include "thirdparty/minizip/unzip.h"
|
||||
#include "thirdparty/minizip/zip.h"
|
||||
|
||||
static void *zipio_open(void *data, const char *p_fname, int mode) {
|
||||
void *zipio_open(void *data, const char *p_fname, int mode);
|
||||
uLong zipio_read(void *data, void *fdata, void *buf, uLong size);
|
||||
uLong zipio_write(voidpf opaque, voidpf stream, const void *buf, uLong size);
|
||||
|
||||
FileAccess *&f = *(FileAccess **)data;
|
||||
long zipio_tell(voidpf opaque, voidpf stream);
|
||||
long zipio_seek(voidpf opaque, voidpf stream, uLong offset, int origin);
|
||||
|
||||
String fname;
|
||||
fname.parse_utf8(p_fname);
|
||||
int zipio_close(voidpf opaque, voidpf stream);
|
||||
|
||||
if (mode & ZLIB_FILEFUNC_MODE_WRITE) {
|
||||
f = FileAccess::open(fname, FileAccess::WRITE);
|
||||
} else {
|
||||
int zipio_testerror(voidpf opaque, voidpf stream);
|
||||
|
||||
f = FileAccess::open(fname, FileAccess::READ);
|
||||
}
|
||||
voidpf zipio_alloc(voidpf opaque, uInt items, uInt size);
|
||||
void zipio_free(voidpf opaque, voidpf address);
|
||||
|
||||
if (!f)
|
||||
return NULL;
|
||||
|
||||
return data;
|
||||
};
|
||||
|
||||
static uLong zipio_read(void *data, void *fdata, void *buf, uLong size) {
|
||||
|
||||
FileAccess *f = *(FileAccess **)data;
|
||||
return f->get_buffer((uint8_t *)buf, size);
|
||||
};
|
||||
|
||||
static uLong zipio_write(voidpf opaque, voidpf stream, const void *buf, uLong size) {
|
||||
|
||||
FileAccess *f = *(FileAccess **)opaque;
|
||||
f->store_buffer((uint8_t *)buf, size);
|
||||
return size;
|
||||
};
|
||||
|
||||
static long zipio_tell(voidpf opaque, voidpf stream) {
|
||||
|
||||
FileAccess *f = *(FileAccess **)opaque;
|
||||
return f->get_position();
|
||||
};
|
||||
|
||||
static long zipio_seek(voidpf opaque, voidpf stream, uLong offset, int origin) {
|
||||
|
||||
FileAccess *f = *(FileAccess **)opaque;
|
||||
|
||||
int pos = offset;
|
||||
switch (origin) {
|
||||
|
||||
case ZLIB_FILEFUNC_SEEK_CUR:
|
||||
pos = f->get_position() + offset;
|
||||
break;
|
||||
case ZLIB_FILEFUNC_SEEK_END:
|
||||
pos = f->get_len() + offset;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
};
|
||||
|
||||
f->seek(pos);
|
||||
return 0;
|
||||
};
|
||||
|
||||
static int zipio_close(voidpf opaque, voidpf stream) {
|
||||
|
||||
FileAccess *&f = *(FileAccess **)opaque;
|
||||
if (f) {
|
||||
f->close();
|
||||
f = NULL;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
|
||||
static int zipio_testerror(voidpf opaque, voidpf stream) {
|
||||
|
||||
FileAccess *f = *(FileAccess **)opaque;
|
||||
return (f && f->get_error() != OK) ? 1 : 0;
|
||||
};
|
||||
|
||||
static voidpf zipio_alloc(voidpf opaque, uInt items, uInt size) {
|
||||
|
||||
voidpf ptr = memalloc(items * size);
|
||||
zeromem(ptr, items * size);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
static void zipio_free(voidpf opaque, voidpf address) {
|
||||
|
||||
memfree(address);
|
||||
}
|
||||
|
||||
static zlib_filefunc_def zipio_create_io_from_file(FileAccess **p_file) {
|
||||
|
||||
zlib_filefunc_def io;
|
||||
io.opaque = p_file;
|
||||
io.zopen_file = zipio_open;
|
||||
io.zread_file = zipio_read;
|
||||
io.zwrite_file = zipio_write;
|
||||
io.ztell_file = zipio_tell;
|
||||
io.zseek_file = zipio_seek;
|
||||
io.zclose_file = zipio_close;
|
||||
io.zerror_file = zipio_testerror;
|
||||
io.alloc_mem = zipio_alloc;
|
||||
io.free_mem = zipio_free;
|
||||
return io;
|
||||
}
|
||||
zlib_filefunc_def zipio_create_io_from_file(FileAccess **p_file);
|
||||
|
||||
#endif // ZIP_IO_H
|
||||
|
|
|
@ -98,36 +98,6 @@ Error ScriptDebuggerRemote::connect_to_host(const String &p_host, uint16_t p_por
|
|||
return OK;
|
||||
}
|
||||
|
||||
static int _ScriptDebuggerRemote_found_id = 0;
|
||||
static Object *_ScriptDebuggerRemote_find = NULL;
|
||||
static void _ScriptDebuggerRemote_debug_func(Object *p_obj) {
|
||||
|
||||
if (_ScriptDebuggerRemote_find == p_obj) {
|
||||
_ScriptDebuggerRemote_found_id = p_obj->get_instance_id();
|
||||
}
|
||||
}
|
||||
|
||||
static ObjectID safe_get_instance_id(const Variant &p_v) {
|
||||
|
||||
Object *o = p_v;
|
||||
if (o == NULL)
|
||||
return 0;
|
||||
else {
|
||||
|
||||
REF r = p_v;
|
||||
if (r.is_valid()) {
|
||||
|
||||
return r->get_instance_id();
|
||||
} else {
|
||||
|
||||
_ScriptDebuggerRemote_found_id = 0;
|
||||
_ScriptDebuggerRemote_find = NULL;
|
||||
ObjectDB::debug_objects(_ScriptDebuggerRemote_debug_func);
|
||||
return _ScriptDebuggerRemote_found_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptDebuggerRemote::_put_variable(const String &p_name, const Variant &p_variable) {
|
||||
|
||||
packet_peer_stream->put_var(p_name);
|
||||
|
|
|
@ -37,33 +37,6 @@
|
|||
#include "scene/resources/default_theme/default_theme.h"
|
||||
#include "scene/resources/dynamic_font.h"
|
||||
|
||||
static Ref<BitmapFont> make_font(int p_height, int p_ascent, int p_valign, int p_charcount, const int *p_chars, const Ref<Texture> &p_texture) {
|
||||
|
||||
Ref<BitmapFont> font(memnew(BitmapFont));
|
||||
font->add_texture(p_texture);
|
||||
|
||||
for (int i = 0; i < p_charcount; i++) {
|
||||
|
||||
const int *c = &p_chars[i * 8];
|
||||
|
||||
int chr = c[0];
|
||||
Rect2 frect;
|
||||
frect.position.x = c[1];
|
||||
frect.position.y = c[2];
|
||||
frect.size.x = c[3];
|
||||
frect.size.y = c[4];
|
||||
Point2 align(c[5], c[6] + p_valign);
|
||||
int advance = c[7];
|
||||
|
||||
font->add_char(chr, 0, frect, align, advance);
|
||||
}
|
||||
|
||||
font->set_height(p_height);
|
||||
font->set_ascent(p_ascent);
|
||||
|
||||
return font;
|
||||
}
|
||||
|
||||
#define MAKE_FALLBACKS(m_name) \
|
||||
m_name->add_fallback(FontArabic); \
|
||||
m_name->add_fallback(FontHebrew); \
|
||||
|
|
|
@ -36,7 +36,6 @@
|
|||
#include "core/io/resource_loader.h"
|
||||
#include "core/io/resource_saver.h"
|
||||
#include "core/io/stream_peer_ssl.h"
|
||||
#include "core/io/zip_io.h"
|
||||
#include "core/message_queue.h"
|
||||
#include "core/os/file_access.h"
|
||||
#include "core/os/input.h"
|
||||
|
|
|
@ -81,12 +81,6 @@ static Ref<StyleBoxLine> make_line_stylebox(Color p_color, int p_thickness = 1,
|
|||
return style;
|
||||
}
|
||||
|
||||
static Ref<StyleBoxFlat> change_border_color(Ref<StyleBoxFlat> p_style, Color p_color) {
|
||||
Ref<StyleBoxFlat> style = p_style->duplicate();
|
||||
style->set_border_color_all(p_color);
|
||||
return style;
|
||||
}
|
||||
|
||||
Ref<ImageTexture> editor_generate_icon(int p_index, bool p_convert_color, float p_scale = EDSCALE, bool p_force_filter = false) {
|
||||
|
||||
Ref<ImageTexture> icon = memnew(ImageTexture);
|
||||
|
|
|
@ -490,120 +490,6 @@ Error ColladaImport::_create_material(const String &p_target) {
|
|||
return OK;
|
||||
}
|
||||
|
||||
static void _generate_normals(const PoolVector<int> &p_indices, const PoolVector<Vector3> &p_vertices, PoolVector<Vector3> &r_normals) {
|
||||
|
||||
r_normals.resize(p_vertices.size());
|
||||
PoolVector<Vector3>::Write narrayw = r_normals.write();
|
||||
|
||||
int iacount = p_indices.size() / 3;
|
||||
PoolVector<int>::Read index_arrayr = p_indices.read();
|
||||
PoolVector<Vector3>::Read vertex_arrayr = p_vertices.read();
|
||||
|
||||
for (int idx = 0; idx < iacount; idx++) {
|
||||
|
||||
Vector3 v[3] = {
|
||||
vertex_arrayr[index_arrayr[idx * 3 + 0]],
|
||||
vertex_arrayr[index_arrayr[idx * 3 + 1]],
|
||||
vertex_arrayr[index_arrayr[idx * 3 + 2]]
|
||||
};
|
||||
|
||||
Vector3 normal = Plane(v[0], v[1], v[2]).normal;
|
||||
|
||||
narrayw[index_arrayr[idx * 3 + 0]] += normal;
|
||||
narrayw[index_arrayr[idx * 3 + 1]] += normal;
|
||||
narrayw[index_arrayr[idx * 3 + 2]] += normal;
|
||||
}
|
||||
|
||||
int vlen = p_vertices.size();
|
||||
|
||||
for (int idx = 0; idx < vlen; idx++) {
|
||||
narrayw[idx].normalize();
|
||||
}
|
||||
}
|
||||
|
||||
static void _generate_tangents_and_binormals(const PoolVector<int> &p_indices, const PoolVector<Vector3> &p_vertices, const PoolVector<Vector3> &p_uvs, const PoolVector<Vector3> &p_normals, PoolVector<real_t> &r_tangents) {
|
||||
|
||||
int vlen = p_vertices.size();
|
||||
|
||||
Vector<Vector3> tangents;
|
||||
tangents.resize(vlen);
|
||||
Vector<Vector3> binormals;
|
||||
binormals.resize(vlen);
|
||||
|
||||
int iacount = p_indices.size() / 3;
|
||||
|
||||
PoolVector<int>::Read index_arrayr = p_indices.read();
|
||||
PoolVector<Vector3>::Read vertex_arrayr = p_vertices.read();
|
||||
PoolVector<Vector3>::Read narrayr = p_normals.read();
|
||||
PoolVector<Vector3>::Read uvarrayr = p_uvs.read();
|
||||
|
||||
for (int idx = 0; idx < iacount; idx++) {
|
||||
|
||||
Vector3 v1 = vertex_arrayr[index_arrayr[idx * 3 + 0]];
|
||||
Vector3 v2 = vertex_arrayr[index_arrayr[idx * 3 + 1]];
|
||||
Vector3 v3 = vertex_arrayr[index_arrayr[idx * 3 + 2]];
|
||||
|
||||
Vector3 w1 = uvarrayr[index_arrayr[idx * 3 + 0]];
|
||||
Vector3 w2 = uvarrayr[index_arrayr[idx * 3 + 1]];
|
||||
Vector3 w3 = uvarrayr[index_arrayr[idx * 3 + 2]];
|
||||
|
||||
real_t x1 = v2.x - v1.x;
|
||||
real_t x2 = v3.x - v1.x;
|
||||
real_t y1 = v2.y - v1.y;
|
||||
real_t y2 = v3.y - v1.y;
|
||||
real_t z1 = v2.z - v1.z;
|
||||
real_t z2 = v3.z - v1.z;
|
||||
|
||||
real_t s1 = w2.x - w1.x;
|
||||
real_t s2 = w3.x - w1.x;
|
||||
real_t t1 = w2.y - w1.y;
|
||||
real_t t2 = w3.y - w1.y;
|
||||
|
||||
real_t r = (s1 * t2 - s2 * t1);
|
||||
|
||||
Vector3 tangent;
|
||||
Vector3 binormal;
|
||||
|
||||
if (r == 0) {
|
||||
|
||||
binormal = Vector3();
|
||||
tangent = Vector3();
|
||||
} else {
|
||||
tangent = Vector3((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r,
|
||||
(t2 * z1 - t1 * z2) * r)
|
||||
.normalized();
|
||||
binormal = Vector3((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r,
|
||||
(s1 * z2 - s2 * z1) * r)
|
||||
.normalized();
|
||||
}
|
||||
|
||||
tangents.write[index_arrayr[idx * 3 + 0]] += tangent;
|
||||
binormals.write[index_arrayr[idx * 3 + 0]] += binormal;
|
||||
tangents.write[index_arrayr[idx * 3 + 1]] += tangent;
|
||||
binormals.write[index_arrayr[idx * 3 + 1]] += binormal;
|
||||
tangents.write[index_arrayr[idx * 3 + 2]] += tangent;
|
||||
binormals.write[index_arrayr[idx * 3 + 2]] += binormal;
|
||||
}
|
||||
|
||||
r_tangents.resize(vlen * 4);
|
||||
PoolVector<real_t>::Write tarrayw = r_tangents.write();
|
||||
|
||||
for (int idx = 0; idx < vlen; idx++) {
|
||||
Vector3 tangent = tangents[idx];
|
||||
Vector3 bingen = narrayr[idx].cross(tangent);
|
||||
float dir;
|
||||
if (bingen.dot(binormals[idx]) < 0)
|
||||
dir = -1.0;
|
||||
else
|
||||
dir = +1.0;
|
||||
|
||||
tarrayw[idx * 4 + 0] = tangent.x;
|
||||
tarrayw[idx * 4 + 1] = tangent.y;
|
||||
tarrayw[idx * 4 + 2] = tangent.z;
|
||||
tarrayw[idx * 4 + 3] = dir;
|
||||
}
|
||||
}
|
||||
|
||||
Error ColladaImport::_create_mesh_surfaces(bool p_optimize, Ref<ArrayMesh> &p_mesh, const Map<String, Collada::NodeGeometry::Material> &p_material_map, const Collada::MeshData &meshdata, const Transform &p_local_xform, const Vector<int> &bone_remap, const Collada::SkinControllerData *p_skin_controller, const Collada::MorphControllerData *p_morph_data, Vector<Ref<ArrayMesh> > p_morph_meshes, bool p_use_compression, bool p_use_mesh_material) {
|
||||
|
||||
bool local_xform_mirror = p_local_xform.basis.determinant() < 0;
|
||||
|
|
|
@ -448,7 +448,6 @@ void ShaderEditor::_text_edit_gui_input(const Ref<InputEvent> &ev) {
|
|||
int col, row;
|
||||
TextEdit *tx = shader_editor->get_text_edit();
|
||||
tx->_get_mouse_pos(mb->get_global_position() - tx->get_global_position(), row, col);
|
||||
Vector2 mpos = mb->get_global_position() - tx->get_global_position();
|
||||
tx->set_right_click_moves_caret(EditorSettings::get_singleton()->get("text_editor/cursor/right_click_moves_caret"));
|
||||
|
||||
if (tx->is_right_click_moving_caret()) {
|
||||
|
|
|
@ -115,11 +115,6 @@ static void _compress_pvrtc4(Image *p_image) {
|
|||
_compress_image(Image::COMPRESS_PVRTC4, p_image);
|
||||
}
|
||||
|
||||
static void _compress_etc(Image *p_image) {
|
||||
|
||||
_compress_image(Image::COMPRESS_ETC, p_image);
|
||||
}
|
||||
|
||||
void _pvrtc_register_compressors() {
|
||||
|
||||
_base_image_compress_pvrtc2_func = Image::_image_compress_pvrtc2_func;
|
||||
|
@ -127,5 +122,4 @@ void _pvrtc_register_compressors() {
|
|||
|
||||
Image::_image_compress_pvrtc2_func = _compress_pvrtc2;
|
||||
Image::_image_compress_pvrtc4_func = _compress_pvrtc4;
|
||||
//Image::_image_compress_etc_func=_compress_etc; //use the built in one for ETC
|
||||
}
|
||||
|
|
|
@ -88,14 +88,6 @@ static Etc::Image::Format _image_format_to_etc2comp_format(Image::Format format)
|
|||
}
|
||||
}
|
||||
|
||||
static void _decompress_etc1(Image *p_img) {
|
||||
// not implemented, to be removed
|
||||
}
|
||||
|
||||
static void _decompress_etc2(Image *p_img) {
|
||||
// not implemented, to be removed
|
||||
}
|
||||
|
||||
static void _compress_etc(Image *p_img, float p_lossy_quality, bool force_etc1_format, Image::CompressSource p_source) {
|
||||
Image::Format img_format = p_img->get_format();
|
||||
Image::DetectChannels detected_channels = p_img->get_detected_channels();
|
||||
|
@ -245,8 +237,5 @@ static void _compress_etc2(Image *p_img, float p_lossy_quality, Image::CompressS
|
|||
void _register_etc_compress_func() {
|
||||
|
||||
Image::_image_compress_etc1_func = _compress_etc1;
|
||||
//Image::_image_decompress_etc1 = _decompress_etc1;
|
||||
|
||||
Image::_image_compress_etc2_func = _compress_etc2;
|
||||
//Image::_image_decompress_etc2 = _decompress_etc2;
|
||||
}
|
||||
|
|
|
@ -43,10 +43,6 @@ static bool _is_text_char(CharType c) {
|
|||
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_';
|
||||
}
|
||||
|
||||
static bool _is_whitespace(CharType c) {
|
||||
return c == '\t' || c == ' ';
|
||||
}
|
||||
|
||||
static bool _is_char(CharType c) {
|
||||
|
||||
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_';
|
||||
|
|
|
@ -51,12 +51,6 @@ void GDScriptLanguage::get_string_delimiters(List<String> *p_delimiters) const {
|
|||
p_delimiters->push_back("\"\"\" \"\"\"");
|
||||
}
|
||||
Ref<Script> GDScriptLanguage::get_template(const String &p_class_name, const String &p_base_class_name) const {
|
||||
#ifdef TOOLS_ENABLED
|
||||
bool th = EDITOR_DEF("text_editor/completion/add_type_hints", false);
|
||||
#else
|
||||
bool th = false;
|
||||
#endif
|
||||
|
||||
String _template = "extends %BASE%\n"
|
||||
"\n"
|
||||
"# Declare member variables here. Examples:\n"
|
||||
|
|
|
@ -3,8 +3,14 @@
|
|||
Import('env')
|
||||
Import('env_modules')
|
||||
|
||||
# Thirdparty source files
|
||||
|
||||
env_stb_vorbis = env_modules.Clone()
|
||||
|
||||
# Thirdparty source files
|
||||
thirdparty_sources = ["#thirdparty/misc/stb_vorbis.c"]
|
||||
|
||||
env_thirdparty = env_stb_vorbis.Clone()
|
||||
env_thirdparty.disable_warnings()
|
||||
env_thirdparty.add_source_files(env.modules_sources, thirdparty_sources)
|
||||
|
||||
# Godot's own source files
|
||||
env_stb_vorbis.add_source_files(env.modules_sources, "*.cpp")
|
||||
|
|
|
@ -32,11 +32,6 @@
|
|||
|
||||
#include "core/os/file_access.h"
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||
#include "thirdparty/misc/stb_vorbis.c"
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
void AudioStreamPlaybackOGGVorbis::_mix_internal(AudioFrame *p_buffer, int p_frames) {
|
||||
|
||||
ERR_FAIL_COND(!active);
|
||||
|
|
|
@ -34,12 +34,7 @@
|
|||
#include "core/io/resource_loader.h"
|
||||
#include "servers/audio/audio_stream.h"
|
||||
|
||||
#define STB_VORBIS_HEADER_ONLY
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||
#include "thirdparty/misc/stb_vorbis.c"
|
||||
#pragma GCC diagnostic pop
|
||||
#undef STB_VORBIS_HEADER_ONLY
|
||||
#include "thirdparty/misc/stb_vorbis.h"
|
||||
|
||||
class AudioStreamOGGVorbis;
|
||||
|
||||
|
|
157
modules/websocket/lws_helper.cpp
Normal file
157
modules/websocket/lws_helper.cpp
Normal file
|
@ -0,0 +1,157 @@
|
|||
/*************************************************************************/
|
||||
/* lws_helper.cpp */
|
||||
/*************************************************************************/
|
||||
/* This file is part of: */
|
||||
/* GODOT ENGINE */
|
||||
/* https://godotengine.org */
|
||||
/*************************************************************************/
|
||||
/* Copyright (c) 2007-2018 Juan Linietsky, Ariel Manzur. */
|
||||
/* Copyright (c) 2014-2018 Godot Engine contributors (cf. AUTHORS.md) */
|
||||
/* */
|
||||
/* Permission is hereby granted, free of charge, to any person obtaining */
|
||||
/* a copy of this software and associated documentation files (the */
|
||||
/* "Software"), to deal in the Software without restriction, including */
|
||||
/* without limitation the rights to use, copy, modify, merge, publish, */
|
||||
/* distribute, sublicense, and/or sell copies of the Software, and to */
|
||||
/* permit persons to whom the Software is furnished to do so, subject to */
|
||||
/* the following conditions: */
|
||||
/* */
|
||||
/* The above copyright notice and this permission notice shall be */
|
||||
/* included in all copies or substantial portions of the Software. */
|
||||
/* */
|
||||
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
|
||||
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
|
||||
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
|
||||
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
|
||||
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
|
||||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
|
||||
#if !defined(JAVASCRIPT_ENABLED)
|
||||
|
||||
#include "lws_helper.h"
|
||||
|
||||
_LWSRef *_lws_create_ref(void *obj) {
|
||||
|
||||
_LWSRef *out = (_LWSRef *)memalloc(sizeof(_LWSRef));
|
||||
out->is_destroying = false;
|
||||
out->free_context = false;
|
||||
out->is_polling = false;
|
||||
out->obj = obj;
|
||||
out->is_valid = true;
|
||||
out->lws_structs = NULL;
|
||||
out->lws_names = NULL;
|
||||
return out;
|
||||
}
|
||||
|
||||
void _lws_free_ref(_LWSRef *ref) {
|
||||
// Free strings and structs
|
||||
memfree(ref->lws_structs);
|
||||
memfree(ref->lws_names);
|
||||
// Free ref
|
||||
memfree(ref);
|
||||
}
|
||||
|
||||
bool _lws_destroy(struct lws_context *context, _LWSRef *ref) {
|
||||
if (context == NULL || ref->is_destroying)
|
||||
return false;
|
||||
|
||||
if (ref->is_polling) {
|
||||
ref->free_context = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
ref->is_destroying = true;
|
||||
lws_context_destroy(context);
|
||||
_lws_free_ref(ref);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool _lws_poll(struct lws_context *context, _LWSRef *ref) {
|
||||
|
||||
ERR_FAIL_COND_V(context == NULL, false);
|
||||
ERR_FAIL_COND_V(ref == NULL, false);
|
||||
|
||||
ref->is_polling = true;
|
||||
lws_service(context, 0);
|
||||
ref->is_polling = false;
|
||||
|
||||
if (!ref->free_context)
|
||||
return false; // Nothing to do
|
||||
|
||||
bool is_valid = ref->is_valid; // Might have been destroyed by poll
|
||||
|
||||
_lws_destroy(context, ref); // Will destroy context and ref
|
||||
|
||||
return is_valid; // If the object should NULL its context and ref
|
||||
}
|
||||
|
||||
/*
|
||||
* Prepare the protocol_structs to be fed to context.
|
||||
* Also prepare the protocol string used by the client.
|
||||
*/
|
||||
void _lws_make_protocols(void *p_obj, lws_callback_function *p_callback, PoolVector<String> p_names, _LWSRef **r_lws_ref) {
|
||||
// The input strings might go away after this call, we need to copy them.
|
||||
// We will clear them when destroying the context.
|
||||
int i;
|
||||
int len = p_names.size();
|
||||
size_t data_size = sizeof(struct LWSPeer::PeerData);
|
||||
PoolVector<String>::Read pnr = p_names.read();
|
||||
|
||||
// This is a reference connecting the object with lws keep track of status, mallocs, etc.
|
||||
// Must survive as long the context.
|
||||
// Must be freed manually when context creation fails.
|
||||
_LWSRef *ref = _lws_create_ref(p_obj);
|
||||
|
||||
// LWS protocol structs.
|
||||
ref->lws_structs = (struct lws_protocols *)memalloc(sizeof(struct lws_protocols) * (len + 2));
|
||||
memset(ref->lws_structs, 0, sizeof(struct lws_protocols) * (len + 2));
|
||||
|
||||
CharString strings = p_names.join(",").ascii();
|
||||
int str_len = strings.length();
|
||||
|
||||
// Joined string of protocols, double the size: comma separated first, NULL separated last
|
||||
ref->lws_names = (char *)memalloc((str_len + 1) * 2); // Plus the terminator
|
||||
|
||||
char *names_ptr = ref->lws_names;
|
||||
struct lws_protocols *structs_ptr = ref->lws_structs;
|
||||
|
||||
// Comma separated protocols string to be used in client Sec-WebSocket-Protocol header
|
||||
if (str_len > 0)
|
||||
copymem(names_ptr, strings.get_data(), str_len);
|
||||
names_ptr[str_len] = '\0'; // NULL terminator
|
||||
|
||||
// NULL terminated protocol strings to be used in protocol structs
|
||||
if (str_len > 0)
|
||||
copymem(&names_ptr[str_len + 1], strings.get_data(), str_len);
|
||||
names_ptr[(str_len * 2) + 1] = '\0'; // NULL terminator
|
||||
int pos = str_len + 1;
|
||||
|
||||
// The first protocol is the default for any http request (before upgrade).
|
||||
// It is also used as the websocket protocol when no subprotocol is specified.
|
||||
structs_ptr[0].name = "default";
|
||||
structs_ptr[0].callback = p_callback;
|
||||
structs_ptr[0].per_session_data_size = data_size;
|
||||
structs_ptr[0].rx_buffer_size = LWS_BUF_SIZE;
|
||||
structs_ptr[0].tx_packet_size = LWS_PACKET_SIZE;
|
||||
// Add user defined protocols
|
||||
for (i = 0; i < len; i++) {
|
||||
structs_ptr[i + 1].name = (const char *)&names_ptr[pos];
|
||||
structs_ptr[i + 1].callback = p_callback;
|
||||
structs_ptr[i + 1].per_session_data_size = data_size;
|
||||
structs_ptr[i + 1].rx_buffer_size = LWS_BUF_SIZE;
|
||||
structs_ptr[i + 1].tx_packet_size = LWS_PACKET_SIZE;
|
||||
pos += pnr[i].ascii().length() + 1;
|
||||
names_ptr[pos - 1] = '\0';
|
||||
}
|
||||
// Add protocols terminator
|
||||
structs_ptr[len + 1].name = NULL;
|
||||
structs_ptr[len + 1].callback = NULL;
|
||||
structs_ptr[len + 1].per_session_data_size = 0;
|
||||
structs_ptr[len + 1].rx_buffer_size = 0;
|
||||
|
||||
*r_lws_ref = ref;
|
||||
}
|
||||
|
||||
#endif
|
|
@ -49,127 +49,11 @@ struct _LWSRef {
|
|||
char *lws_names;
|
||||
};
|
||||
|
||||
static _LWSRef *_lws_create_ref(void *obj) {
|
||||
|
||||
_LWSRef *out = (_LWSRef *)memalloc(sizeof(_LWSRef));
|
||||
out->is_destroying = false;
|
||||
out->free_context = false;
|
||||
out->is_polling = false;
|
||||
out->obj = obj;
|
||||
out->is_valid = true;
|
||||
out->lws_structs = NULL;
|
||||
out->lws_names = NULL;
|
||||
return out;
|
||||
}
|
||||
|
||||
static void _lws_free_ref(_LWSRef *ref) {
|
||||
// Free strings and structs
|
||||
memfree(ref->lws_structs);
|
||||
memfree(ref->lws_names);
|
||||
// Free ref
|
||||
memfree(ref);
|
||||
}
|
||||
|
||||
static bool _lws_destroy(struct lws_context *context, _LWSRef *ref) {
|
||||
if (context == NULL || ref->is_destroying)
|
||||
return false;
|
||||
|
||||
if (ref->is_polling) {
|
||||
ref->free_context = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
ref->is_destroying = true;
|
||||
lws_context_destroy(context);
|
||||
_lws_free_ref(ref);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool _lws_poll(struct lws_context *context, _LWSRef *ref) {
|
||||
|
||||
ERR_FAIL_COND_V(context == NULL, false);
|
||||
ERR_FAIL_COND_V(ref == NULL, false);
|
||||
|
||||
ref->is_polling = true;
|
||||
lws_service(context, 0);
|
||||
ref->is_polling = false;
|
||||
|
||||
if (!ref->free_context)
|
||||
return false; // Nothing to do
|
||||
|
||||
bool is_valid = ref->is_valid; // Might have been destroyed by poll
|
||||
|
||||
_lws_destroy(context, ref); // Will destroy context and ref
|
||||
|
||||
return is_valid; // If the object should NULL its context and ref
|
||||
}
|
||||
|
||||
/*
|
||||
* Prepare the protocol_structs to be fed to context.
|
||||
* Also prepare the protocol string used by the client.
|
||||
*/
|
||||
static void _lws_make_protocols(void *p_obj, lws_callback_function *p_callback, PoolVector<String> p_names, _LWSRef **r_lws_ref) {
|
||||
// The input strings might go away after this call, we need to copy them.
|
||||
// We will clear them when destroying the context.
|
||||
int i;
|
||||
int len = p_names.size();
|
||||
size_t data_size = sizeof(struct LWSPeer::PeerData);
|
||||
PoolVector<String>::Read pnr = p_names.read();
|
||||
|
||||
// This is a reference connecting the object with lws keep track of status, mallocs, etc.
|
||||
// Must survive as long the context.
|
||||
// Must be freed manually when context creation fails.
|
||||
_LWSRef *ref = _lws_create_ref(p_obj);
|
||||
|
||||
// LWS protocol structs.
|
||||
ref->lws_structs = (struct lws_protocols *)memalloc(sizeof(struct lws_protocols) * (len + 2));
|
||||
memset(ref->lws_structs, 0, sizeof(struct lws_protocols) * (len + 2));
|
||||
|
||||
CharString strings = p_names.join(",").ascii();
|
||||
int str_len = strings.length();
|
||||
|
||||
// Joined string of protocols, double the size: comma separated first, NULL separated last
|
||||
ref->lws_names = (char *)memalloc((str_len + 1) * 2); // Plus the terminator
|
||||
|
||||
char *names_ptr = ref->lws_names;
|
||||
struct lws_protocols *structs_ptr = ref->lws_structs;
|
||||
|
||||
// Comma separated protocols string to be used in client Sec-WebSocket-Protocol header
|
||||
if (str_len > 0)
|
||||
copymem(names_ptr, strings.get_data(), str_len);
|
||||
names_ptr[str_len] = '\0'; // NULL terminator
|
||||
|
||||
// NULL terminated protocol strings to be used in protocol structs
|
||||
if (str_len > 0)
|
||||
copymem(&names_ptr[str_len + 1], strings.get_data(), str_len);
|
||||
names_ptr[(str_len * 2) + 1] = '\0'; // NULL terminator
|
||||
int pos = str_len + 1;
|
||||
|
||||
// The first protocol is the default for any http request (before upgrade).
|
||||
// It is also used as the websocket protocol when no subprotocol is specified.
|
||||
structs_ptr[0].name = "default";
|
||||
structs_ptr[0].callback = p_callback;
|
||||
structs_ptr[0].per_session_data_size = data_size;
|
||||
structs_ptr[0].rx_buffer_size = LWS_BUF_SIZE;
|
||||
structs_ptr[0].tx_packet_size = LWS_PACKET_SIZE;
|
||||
// Add user defined protocols
|
||||
for (i = 0; i < len; i++) {
|
||||
structs_ptr[i + 1].name = (const char *)&names_ptr[pos];
|
||||
structs_ptr[i + 1].callback = p_callback;
|
||||
structs_ptr[i + 1].per_session_data_size = data_size;
|
||||
structs_ptr[i + 1].rx_buffer_size = LWS_BUF_SIZE;
|
||||
structs_ptr[i + 1].tx_packet_size = LWS_PACKET_SIZE;
|
||||
pos += pnr[i].ascii().length() + 1;
|
||||
names_ptr[pos - 1] = '\0';
|
||||
}
|
||||
// Add protocols terminator
|
||||
structs_ptr[len + 1].name = NULL;
|
||||
structs_ptr[len + 1].callback = NULL;
|
||||
structs_ptr[len + 1].per_session_data_size = 0;
|
||||
structs_ptr[len + 1].rx_buffer_size = 0;
|
||||
|
||||
*r_lws_ref = ref;
|
||||
}
|
||||
_LWSRef *_lws_create_ref(void *obj);
|
||||
void _lws_free_ref(_LWSRef *ref);
|
||||
bool _lws_destroy(struct lws_context *context, _LWSRef *ref);
|
||||
bool _lws_poll(struct lws_context *context, _LWSRef *ref);
|
||||
void _lws_make_protocols(void *p_obj, lws_callback_function *p_callback, PoolVector<String> p_names, _LWSRef **r_lws_ref);
|
||||
|
||||
/* clang-format off */
|
||||
#define LWS_HELPER(CNAME) \
|
||||
|
|
|
@ -507,10 +507,6 @@ static float rand_from_seed(uint32_t &seed) {
|
|||
return float(seed % uint32_t(65536)) / 65535.0;
|
||||
}
|
||||
|
||||
static float rand_from_seed_m1_p1(uint32_t &seed) {
|
||||
return rand_from_seed(seed) * 2.0 - 1.0;
|
||||
}
|
||||
|
||||
void CPUParticles2D::_particles_process(float p_delta) {
|
||||
|
||||
p_delta *= speed_scale;
|
||||
|
|
|
@ -471,10 +471,6 @@ static float rand_from_seed(uint32_t &seed) {
|
|||
return float(seed % uint32_t(65536)) / 65535.0;
|
||||
}
|
||||
|
||||
static float rand_from_seed_m1_p1(uint32_t &seed) {
|
||||
return rand_from_seed(seed) * 2.0 - 1.0;
|
||||
}
|
||||
|
||||
void CPUParticles::_particles_process(float p_delta) {
|
||||
|
||||
p_delta *= speed_scale;
|
||||
|
|
|
@ -91,6 +91,7 @@ void LinkButton::_notification(int p_what) {
|
|||
do_underline = underline_mode != UNDERLINE_MODE_NEVER;
|
||||
|
||||
} break;
|
||||
case DRAW_HOVER_PRESSED: break; // Not used in this class
|
||||
case DRAW_DISABLED: {
|
||||
|
||||
color = get_color("font_color_disabled");
|
||||
|
|
|
@ -150,6 +150,7 @@ void TextureButton::_notification(int p_what) {
|
|||
} else
|
||||
texdraw = hover;
|
||||
} break;
|
||||
case DRAW_HOVER_PRESSED: break; // Not used in this class
|
||||
case DRAW_DISABLED: {
|
||||
|
||||
if (disabled.is_null()) {
|
||||
|
|
|
@ -120,41 +120,7 @@ static Ref<Texture> make_icon(T p_src) {
|
|||
return texture;
|
||||
}
|
||||
|
||||
static Ref<Shader> make_shader(const char *vertex_code, const char *fragment_code, const char *lighting_code) {
|
||||
Ref<Shader> shader = (memnew(Shader()));
|
||||
//shader->set_code(vertex_code, fragment_code, lighting_code);
|
||||
|
||||
return shader;
|
||||
}
|
||||
|
||||
static Ref<BitmapFont> make_font(int p_height, int p_ascent, int p_valign, int p_charcount, const int *p_chars, const Ref<Texture> &p_texture) {
|
||||
|
||||
Ref<BitmapFont> font(memnew(BitmapFont));
|
||||
font->add_texture(p_texture);
|
||||
|
||||
for (int i = 0; i < p_charcount; i++) {
|
||||
|
||||
const int *c = &p_chars[i * 8];
|
||||
|
||||
int chr = c[0];
|
||||
Rect2 frect;
|
||||
frect.position.x = c[1];
|
||||
frect.position.y = c[2];
|
||||
frect.size.x = c[3];
|
||||
frect.size.y = c[4];
|
||||
Point2 align(c[5], c[6] + p_valign);
|
||||
int advance = c[7];
|
||||
|
||||
font->add_char(chr, 0, frect, align, advance);
|
||||
}
|
||||
|
||||
font->set_height(p_height);
|
||||
font->set_ascent(p_ascent);
|
||||
|
||||
return font;
|
||||
}
|
||||
|
||||
static Ref<BitmapFont> make_font2(int p_height, int p_ascent, int p_charcount, const int *p_char_rects, int p_kerning_count, const int *p_kernings, int p_w, int p_h, const unsigned char *p_img) {
|
||||
static Ref<BitmapFont> make_font(int p_height, int p_ascent, int p_charcount, const int *p_char_rects, int p_kerning_count, const int *p_kernings, int p_w, int p_h, const unsigned char *p_img) {
|
||||
|
||||
Ref<BitmapFont> font(memnew(BitmapFont));
|
||||
|
||||
|
@ -209,8 +175,6 @@ void fill_default_theme(Ref<Theme> &theme, const Ref<Font> &default_font, const
|
|||
|
||||
tex_cache = memnew(TexCacheMap);
|
||||
|
||||
//Ref<BitmapFont> default_font = make_font(_bi_font_normal_height,_bi_font_normal_ascent,_bi_font_normal_valign,_bi_font_normal_charcount,_bi_font_normal_characters,make_icon(font_normal_png));
|
||||
|
||||
// Font Colors
|
||||
|
||||
Color control_font_color = Color::html("e0e0e0");
|
||||
|
@ -913,9 +877,9 @@ void make_default_theme(bool p_hidpi, Ref<Font> p_font) {
|
|||
if (p_font.is_valid()) {
|
||||
default_font = p_font;
|
||||
} else if (p_hidpi) {
|
||||
default_font = make_font2(_hidpi_font_height, _hidpi_font_ascent, _hidpi_font_charcount, &_hidpi_font_charrects[0][0], _hidpi_font_kerning_pair_count, &_hidpi_font_kerning_pairs[0][0], _hidpi_font_img_width, _hidpi_font_img_height, _hidpi_font_img_data);
|
||||
default_font = make_font(_hidpi_font_height, _hidpi_font_ascent, _hidpi_font_charcount, &_hidpi_font_charrects[0][0], _hidpi_font_kerning_pair_count, &_hidpi_font_kerning_pairs[0][0], _hidpi_font_img_width, _hidpi_font_img_height, _hidpi_font_img_data);
|
||||
} else {
|
||||
default_font = make_font2(_lodpi_font_height, _lodpi_font_ascent, _lodpi_font_charcount, &_lodpi_font_charrects[0][0], _lodpi_font_kerning_pair_count, &_lodpi_font_kerning_pairs[0][0], _lodpi_font_img_width, _lodpi_font_img_height, _lodpi_font_img_data);
|
||||
default_font = make_font(_lodpi_font_height, _lodpi_font_ascent, _lodpi_font_charcount, &_lodpi_font_charrects[0][0], _lodpi_font_kerning_pair_count, &_lodpi_font_kerning_pairs[0][0], _lodpi_font_img_width, _lodpi_font_img_height, _lodpi_font_img_data);
|
||||
}
|
||||
Ref<Font> large_font = default_font;
|
||||
fill_default_theme(t, default_font, large_font, default_icon, default_style, p_hidpi ? 2.0 : 1.0);
|
||||
|
|
2
thirdparty/misc/stb_vorbis.h
vendored
Normal file
2
thirdparty/misc/stb_vorbis.h
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
#define STB_VORBIS_HEADER_ONLY
|
||||
#include "stb_vorbis.c"
|
Loading…
Reference in a new issue