EventList and Spline do not seem to be defined (api)
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 45/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- c, javascript
- Domínio
- api, build-system
Direção de pesquisa
Comece com tools/gen_api.js e as entradas da blocklist para EventList e Spline; em seguida, inspecione build/_deps/raylib-src/parser/output/raylib_api.json e o tools/api.json gerado. Compare as declarações geradas com a versão do raylib usada pelo DLL FFI wrapper. Considera-se concluído quando as entradas de API afetadas corresponderem aos símbolos disponíveis do raylib e não produzirem mais erros de função indefinida.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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))
- Linguagem predominante
- C
- Estrelas
- 0
- Forks
- 1
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de konsumer/raylib-pointers
-
Potential memory leakAberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
konsumer/raylib-pointers#12 · 2 comentários · 1 reação ·
-
Nested structs & arraysAbertaenhancement parent
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
-
nested-structs/arrays (C)AbertaC enhancement todo
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 28/100
-
defines (bun)Abertabunjs enhancement todo
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 48/100
-
nested structs (bun)Abertabunjs enhancement todo
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
Todas as issues de konsumer/raylib-pointers
Issues semelhantes
-
enhancement good first issue help wanted
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
-
bug multiplayer status: planned
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 67/100
ChupathingyCE/chupathingyce#851 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 73/100
HigherOrderCO/Bend#2104 ·
-
research-radar
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Mantenedores costumam responder em até 1 dia
-
good first issue help wanted program
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 83/100
hffgzktbcc-blip/ounce-core#297 ·
Mantenedores costumam responder em até 1 dia