Files
filament/tools/codegen-options/javascript.template
Philip Rideout a572a10ef7 Add codegen golang program. (#5534)
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.
2022-05-10 14:40:51 -07:00

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}}