This adds a code generator, implemented in Go. This PR also prepares `Options.h` (the ground truth) by simplifying its syntax just a bit. The ground truth file must have very simple C++ syntax, which is described in the README: https://github.com/google/filament/blob/pr/codegen2/tools/codegen-options/README.md This process revealed a small bug: `Filter.MEDIAN` was bound to the incorrect value in Java. The generated code is not yet used, stay tuned.
76 lines
1.9 KiB
Plaintext
76 lines
1.9 KiB
Plaintext
{{ define "JsBindingsHeader" }}// This file has been generated by codegen-options
|
|
|
|
#include <emscripten.h>
|
|
#include <emscripten/bind.h>
|
|
|
|
using namespace emscripten;
|
|
using namespace filament;
|
|
|
|
EMSCRIPTEN_BINDINGS(jsbindings_generated) {
|
|
{{end}}
|
|
|
|
{{define "JsBindingsStruct"}}
|
|
{{- $struct_name := .QualifiedName }}
|
|
value_object<View::{{ $struct_name }}>("View${{ $struct_name }}")
|
|
{{- range $index, $field := .Fields}}
|
|
.field("{{ $field.Name }}", &View::{{ $struct_name }}::{{ $field.Name }})
|
|
{{- end }}
|
|
;
|
|
{{end}}
|
|
|
|
{{define "JsBindingsFooter"}}
|
|
} // EMSCRIPTEN_BINDINGS
|
|
{{end}}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
{{define "JsEnumsHeader"}}// This file has been generated by codegen-options
|
|
|
|
#include <emscripten.h>
|
|
#include <emscripten/bind.h>
|
|
|
|
using namespace emscripten;
|
|
using namespace filament;
|
|
|
|
EMSCRIPTEN_BINDINGS(jsenums_generated) {
|
|
{{end}}
|
|
|
|
{{define "JsEnum"}}
|
|
{{- $enum_name := .QualifiedName }}
|
|
enum_<View::{{ $enum_name }}>("View${{ $enum_name }}")
|
|
{{- range .Values}}
|
|
.value("{{ . }}", &View::{{ $enum_name }}::{{ . }})
|
|
{{- end }}
|
|
;
|
|
{{end}}
|
|
|
|
{{define "JsEnumsFooter"}}
|
|
} // EMSCRIPTEN_BINDINGS
|
|
{{end}}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
{{define "JsExtensionsHeader"}}// This file has been generated by codegen-options
|
|
|
|
Filament.loadGeneratedExtensions = function() {
|
|
{{end}}
|
|
|
|
{{define "JsExtension"}}
|
|
Filament.View.prototype.set{{ .BaseName }}Defaults = function(overrides) {
|
|
const options = {
|
|
{{- range $index, $field := .Fields}}
|
|
{{- if $field.SkipJavaScript}}
|
|
// JavaScript binding for {{$field.Name}} is not yet supported, must use default value.
|
|
{{- else }}
|
|
{{$field.Name}}: {{jsify $field.DefaultValue}},
|
|
{{- end }}
|
|
{{- end }}
|
|
};
|
|
return Object.assign(options, overrides);
|
|
};
|
|
{{end}}
|
|
|
|
{{define "JsExtensionsFooter"}}
|
|
};
|
|
{{end}}
|