EventList and Spline do not seem to be defined (api)
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- c, javascript
- Ambito
- api, build-system
Direzione di ricerca
Inizia da tools/gen_api.js e dalle voci della blocklist per EventList e Spline, quindi esamina build/_deps/raylib-src/parser/output/raylib_api.json e il tools/api.json generato. Confronta le dichiarazioni generate con la versione di raylib utilizzata dal DLL FFI wrapper. Il lavoro è completato quando le voci API interessate corrispondono ai simboli raylib disponibili e non producono più errori di funzione non definita.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Essentially, all the functions with EventList or Spline are not defined (but are output by raylib api-gen) and throw an error if DLL is ffi-wrapped.
I think this is related to versioning mismatch with raylib (which may be a sign I need to adjust build to use raylib better.)
https://github.com/konsumer/raylib-pointers/blob/f365325/tools/gen_api.js#L27
// this will generate API info about all the new wrapped stuff & utils
// it's basically the same as the stuff parser generates in raylib
// but I add my wrappers and and struct-utils
import { writeFile, readFile } from 'fs/promises'
// check if the function will be wrapped
const isWrapped = (f) => {
const returnPointer = /^[A-Z]/.test(f.returnType)
// do any params need to be converted to pointers?
let paramPointer = false
for (const p of f.params || []) {
if (/[A-Z]/.test(p.type)) {
paramPointer = true
break
}
}
return returnPointer || paramPointer
}
export const blocklist = [
// this is blocked because I add wrapped_WindowShouldClose manually
'WindowShouldClose',
// TODO: I think these are not available in the current version, but for some reason are referenced
'LoadAutomationEventList',
'UnloadAutomationEventList',
'ExportAutomationEventList',
'SetAutomationEventList',
'PlayAutomationEventList',
'PlayAutomationEvent',
'DrawLineBezier',
'DrawCircleLinesV',
'DrawSplineLinear',
'DrawSplineBasis',
'DrawSplineCatmullRom',
'DrawSplineBezierQuadratic',
'DrawSplineBezierCubic',
'DrawSplineSegmentLinear',
'DrawSplineSegmentBasis',
'DrawSplineSegmentCatmullRom',
'DrawSplineSegmentBezierQuadratic',
'DrawSplineSegmentBezierCubic',
'GetSplinePointLinear',
'GetSplinePointBasis',
'GetSplinePointCatmullRom',
'GetSplinePointBezierQuad',
'GetSplinePointBezierCubic'
]
const blocklistStructs = []
const { defines, structs, aliases, enums, callbacks, functions } = JSON.parse(await readFile('build/_deps/raylib-src/parser/output/raylib_api.json'))
const wrapped = []
const unwrapped = []
const struct_utils = []
for (const { name, description, fields } of structs) {
if (blocklistStructs.includes(name)) {
continue
}
struct_utils.push({
name: `${name}_size`,
description: `Get byte-size of ${name} struct`,
returnType: 'unsigned int',
params: []
})
for (const field of fields) {
struct_utils.push({
name: `${name}_get_${field.name}`,
description: `Getter for ${name}->${field.name}`,
returnType: field.type,
params: [{ name: 'obj', type: `${field.name}*` }]
})
struct_utils.push({
name: `${name}_set_${field.name}`,
description: `Setter for ${name}->${field.name}`,
returnType: 'void',
params: [
{ name: 'obj', type: `${field.name}*` },
{ name: 'v', type: field.type }
]
})
}
}
for (const f of functions) {
if (blocklist.includes(f.name)) {
continue
}
if (isWrapped(f)) {
wrapped.push({
name: `wrapped_${f.name}`,
description: f.description,
original: f.name,
returnType: /[A-Z]/.test(f.returnType) ? `${f.returnType}*` : f.returnType,
params: (f.params || []).map((p) => {
return {
...p,
type: /[A-Z]/.test(p.type) ? `${p.type}*` : p.type
}
})
})
} else {
f.params ||= []
unwrapped.push(f)
}
}
// these are my additions (per-frame alloc/free)
wrapped.push({
name: 'wrapped_alloc',
original: 'alloc',
description: 'Allocate memory, cleared on every WindowShouldClose call (your frame update-loop)',
returnType: 'void*',
params: [
{
name: 'size',
type: 'unsigned int',
description: 'The size (in bytes) to allocate'
}
]
})
wrapped.push({
name: 'wrapped_free',
original: 'free',
description: 'Clear allocated memory. If it was not allocated (or has already been freed) this will error.',
returnType: 'void',
params: [
{
name: 'pointer',
type: 'void*',
description: 'The pointer to free'
}
]
})
wrapped.push({
name: 'wrapped_WindowShouldClose',
original: 'WindowShouldClose',
description: 'Check if application should close (KEY_ESCAPE pressed or windows close icon clicked.) This also clears memory that was allocated since last call.',
returnType: 'bool',
params: []
})
await writeFile('tools/api.json', JSON.stringify({ unwrapped, wrapped, struct_utils, defines, structs, aliases, enums, callbacks, functions }, null, 2))
- Lingua principale
- C
- Stelle
- 0
- Fork
- 1
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di konsumer/raylib-pointers
-
Potential memory leakAperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
konsumer/raylib-pointers#12 · 2 commenti · 1 reazione ·
-
Nested structs & arraysApertaenhancement parent
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
-
nested-structs/arrays (C)ApertaC enhancement todo
Difficoltà 4/5 3-5 giorni Idoneità per principianti 28/100
-
defines (bun)Apertabunjs enhancement todo
Difficoltà 2/5 1-3 ore Idoneità per principianti 48/100
-
nested structs (bun)Apertabunjs enhancement todo
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
Tutte le issue di konsumer/raylib-pointers
Issue simili
-
enhancement good first issue help wanted
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
bug multiplayer status: planned
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
ChupathingyCE/chupathingyce#851 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
HigherOrderCO/Bend#2104 ·
-
research-radar
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
good first issue help wanted program
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
hffgzktbcc-blip/ounce-core#297 ·
I maintainer di solito rispondono entro 1 giorno